@askova

Любые ли типы данных можно скомпилировать в DLL библиотеку (C++) для использования в проекте C#?

Доброго времени суток, коллеги!

Нужна консультация специалиста!
Имеется на руках С++ проект lib-библиотеки и проекта демонстрации работы с библиотекой (С++) - Visual Studio 2017.
В библиотеке имеются различные структуры, классы, константы, перечисления, объединения (union) и пр. типы данных необходимых для работы библиотеки. Основная цель библиотеки установить соединение с устройством и в режиме реального времени получать информацию (парсинг битовой информации).

Нужно как-то использовать исходники lib-библиотеки C++, так чтобы можно было использовать эти наработки в проекте С#. Используя пример: https://msdn.microsoft.com/en-us/library/ms235636.aspx удалось скомпилировать dll, но она работает только в проекте С++ как в примере, в проекте С# не удается её использовать с помощью DLLImport - ошибки точек входа.

Направьте на путь истиный или подсобите конретным решением текущей задачи.
Все проекты могу выслать по необходимости.

Например как получить доступ к переменной в библиотеке или классу?
  • Вопрос задан
  • 816 просмотров
Пригласить эксперта
Ответы на вопрос 1
@anikavoi
Там вызовы делаются через... ну ты понял.

[DllImport("../../../Release/RContDll1.dll", EntryPoint = "math_add", CallingConvention = CallingConvention.StdCall)]
static extern int Add(int a, int b);

А в библиотеке должно быть такое:

extern "C"
{
__declspec(dllexport) int __stdcall math_add(int a, int b)
{
return a + b;
}

}

ИМХО, проще написать на C "прокладку" которую будет вызывать C#, а она в свою очередь вызовет настоящую функцию dll.

Данные передаются нормально - по адресу структурой, а уже потом в C# начинается цирк с [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ....)]
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы