Как звонить, управляемый c# функционирует от неуправляемого C++
Сначала я использовал 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
Я использовал классы-оболочки C ++ / CLI , описанные здесь , и это было относительно легко реализовать.
RE: Как вызвать управляемый код C # из неуправляемого приложения C ++?
Вызов управляемых COM-объектов .NET C # из неуправляемого кода C ++ ...
http://www.codeproject.com/KB/cs/ManagedCOM.aspx
Обертывание управляемой библиотеки DLL C # в неуправляемом проекте C ++: dll.
http://www.experts-exchange.com/Programming/Languages/.NET/Q_22006727.html
Или воспользуйтесь моим проектом , который позволяет C # создавать неуправляемые экспортные данные. Их можно употреблять, как если бы они были написаны на родном языке.