2015-06-08 5 views
0

Я уже знаю, как вызывать функции C++ DLL из C#, когда предоставленные функции не являются членами классов. Но как я могу назвать член класса, как foo, в следующем примере кода?Вызов класса класса C++ DLL из C#

class _declspec(dllexport) MyClass{ 
    public: 
     void foo(); 
}; 

Делать что-то вроде это не работает, потому что C# -Compiler не знает, какой класс позвонить.

[DllImport("MyDLL", CallingConvention = CallingConvention.Cdecl)] 
    private static extern void foo(); 

ответ

2

Единственный способ напрямую вызывать методы объекта Си ++ из C# (и в большинстве других языков) является создание полноценного объекта COM из него.

Простой способ с уровнем косвенности: разработать API чисто статических методов, которые отражают операции объекта. Тогда вы можете легко вызвать это из .NET.

C++:

MyClass* WINAPI CreateMyClass() { return new MyClass(); } 
void WINAPI CallFoo(MyClass* o) { o->foo(); } 

C#:

[DllImport("MyDLL")] 
private static IntPtr CreateMyClass(); 

[DllImport("MyDLL")] 
private static void CallFoo(IntPtr o); 
Смежные вопросы