Сначала я использовал 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