dj4400 Ответов: 1

Использование экспортированного класса из библиотеки DLL C++ в C#


Всем привет,

Я пытаюсь использовать dll c++ в приложении c# winform

Библиотека Dll экспортирует класс (CMyClass), который наследуется от другого базового класса.

Экспорт осуществляется с помощью оболочки которая инкапсулирует CTor DTor и другую функцию таким образом:

extern "C" {
extern __declspec(dllexport) CMyClass* CreateMyClass();
.DTor..
.функция..
}

а CreateMyClass-это что-то вроде этого:


CMyClass* CreateMyClass (){возвращает новый CMyClass();}


Вызов CreateMyClass в c# выполняется путем объявления
[DllImport("MyDllPath.....")]
статический публичный extern IntPtr CreateMyClass ();

а затем вызов IntPtr p = CreateMyClass() .

Вызов завершается неудачей при попытке чтения или записи защищенной памяти"

Можно ли вызвать класс c++, который является производным классом в c#?

Спасибо!!

Что я уже пробовал:

Библиотека dll прекрасно работает в другом приложении на языке C++.

Приложению C# удалось вызвать CreateMyClass, если CMyClass не является производным классом

1 Ответов

Рейтинг:
0

KarstenK

В двух словах: напишите COM-оболочку вокруг класса.

Вы можете сделать это с помощью маршалинга или C++ COM Interop как описано в Microsoft. Вот такая статья Как Маршал класса C++ в который входит демо-проект.