Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/62: Рейтинг темы: голосов - 62, средняя оценка - 4.69
lexus_ilia
3057 / 717 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
1

Импорт c++ dll в проект на c#

24.04.2011, 21:49. Просмотров 11471. Ответов 5

Форумчане, доброго времени суток. Есть проблема, пересмотрел на нашем форуме, все что находил не помогает. Суть вопроса. Есть проект (исходники у меня имеются) написанный на C++, после компиляции получаем dll. Сам откомпилировал, ошибок никаких нет, взял dll'ky попробовал добавить ее в свой проект (пишу на C#) вот таким способом (Правая клавиша->добавить ссылку->выбрал требуемую dll'ky) - так оно ругается "Убедитесь что файл доступен, и является допустимой сборкой или компонентом COM".
Ну думаю, ладно, погуглил, у ребят такое встречается, есть несколько выходов, вот что я пробовал:
1) использование DllImport
C#
1
2
3
 [DllImport(@"SiDra.dll", EntryPoint = "EI_GetName", CharSet = CharSet.Unicode, 
            CallingConvention = CallingConvention.StdCall)]
        unsafe public static extern char* EI_GetName();
EI_GetName описана следующим образом в dll'ke в файле main.cpp
C++
1
2
3
4
__declspec(dllexport) char * __stdcall EI_GetName()
{
    return "SiDra 2";
}
пробовал писать вариации DllImport'a: менял параметры CallingConvention менял название функции (добавлял подчеркивание вот так: EntryPoint = "_EI_GetName") ничего не помогло ругается, что не может найти точку входа dll.

2) попробовал использовать вот такую вещь:
C#
1
2
3
4
  static Assembly SampleAssembly = Assembly.LoadFrom("SiDra");
        static MethodInfo VideoSour = SampleAssembly.GetTypes()[1].GetMethod("EI_GetName");
   //дальше в коде как я понял надо писать вот так
  VideoSour.Invoke(null,null);
С этим методом я как-то не разобрался, вот и решил спросить у знающих людей, как же правильно подключить dll к проекту?

Скажу честно на C# писал и пишу мало, я больше немного на другом языке пишу, вот и решил, что больше вариантов нет, а читать книги времени сейчас тоже нет. Если не сложно, дайте дельный совет в какую сторону смотреть, что поискать?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2011, 21:49
Ответы с готовыми решениями:

Импорт DLL на C++ в проект на C#
Здравствуйте. Сразу скажу, что в C++ и C# новичок, и я пытаюсь как-то...

Импорт DLL на C++ в проект на C#. Возвратить массив символов
Доброго времени суток. Появилась нужда написать динамическую библиотеку с...

Импорт DLL
Есть DLL, в которой определён namespace DLL_test, а в программе нужно...

Импорт из dll
В dll есть функция, возвращающая строку в стиле С char const* __cdecl fn() ...

Импорт 3D-моделей (.dae) в проект
Как импортировать 3д модель в проект, с последующими изменениями её ширины,...

5
freeba
Неадекват
1279 / 1076 / 206
Регистрация: 02.04.2010
Сообщений: 2,473
Записей в блоге: 2
Завершенные тесты: 2
24.04.2011, 23:16 2
1.
попробовал использовать вот такую вещь:
Не прокатит ибо с++ это native код, а не CIL.
2. Заглянуть сюда и сюда.
0
Петррр
6163 / 3464 / 897
Регистрация: 28.10.2010
Сообщений: 5,928
24.04.2011, 23:26 3
Выложите откомпилированную dll и исходный код. Нам будет легче.
2
lexus_ilia
3057 / 717 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
24.04.2011, 23:40  [ТС] 4
прикрепил иходники:
в архиве Шашки.rar находится проект на C# (папка Шашки) и rar архив dll'ki (sidra.rar) и сама dll'ka (sidra.dll)
Шашки.rar
freeba по первой ссылке был, когда искал ответа на форуме, но у меня ни один из двух пунктов не подходит. По второй ссылке посмотрел, как я понял, Вы намекали почитать про: "Default Marshaling and Specifying Custom Marshaling for Parameters to Unmanaged Methods"? Или на что-то другое? DllImport юзал, не помогло (может быть не так юзал?).
0
NickoTin
Почетный модератор
Эксперт .NET
8450 / 3572 / 402
Регистрация: 14.06.2010
Сообщений: 4,512
Записей в блоге: 9
24.04.2011, 23:45 5
Лучший ответ Сообщение было отмечено как решение

Решение

lexus_ilia, перекомпилируй dll, при объявлении функции так:
C++
1
2
3
4
extern "C" __declspec(dllexport) char * __stdcall EI_GetName()
{
        return "SiDra 2";
}
У тебя в dll все имена преобразованы. Тогда импорт будет такой:
C#
1
2
[DllImport(@"...")]
static extern StringBuilder EI_GetName();
4
Миниатюры
Импорт c++ dll в проект на c#  
lexus_ilia
3057 / 717 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
24.04.2011, 23:56  [ТС] 6
SSTREGG, Спасибо, сейчас попробую.

Добавлено через 6 минут
Заработало) Круто, аж не верится) Спасибо большое) А я целый день провёл за изучение способов подключения и проб этих способов.
0
24.04.2011, 23:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2011, 23:56

Импорт файлов в проект на ходу
Здравствуйте в проекте есть такой файл, как Resources.resx, так вот, я знаю,...

Импорт С++ библиотеки в .NET проект
админа ...переместите, пожалуйста, если не в тот раздел засунул Вопрос у...

Импорт класса из dll
Добрый день! Извиняюсь, если вопрос очень нубский. Обшарил кучу разных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru