Сначала я использовал COM-взаимодействие, но теперь я переключился на IJW (он просто работает), так как он намного проще. У меня есть оболочка C ++ / CLR DLL (скомпилировать с /clr).
Простой пример (использование статики для упрощения вызовов):
namespace MyClasses
{
public class MyClass
{
public static void DoSomething()
{
MessageBox.Show("Hello World");
}
}
}
В DLL я могу ссылаться на пространства имен следующим образом:
using namespace MyClasses;
И назовите это:
__declspec(dllexport) void CallManagedCode()
{
MyClass::DoSomething();
}
Теперь у вас есть неуправляемый экспорт DLL «CallManagedCode», который вызывает управляемый код.
Конечно, вам также необходимо преобразовать данные между управляемой / неуправляемой границей. Начиная с VS2008, Microsoft включает помощника-маршала для преобразования между неуправляемым и управляемым типами. Смотри http://msdn.microsoft.com/en-us/library/bb384865.aspx