Можно ли вызвать код C ++, возможно, скомпилированный как файл библиотеки кода (.dll), из языка .NET, такого как C #?
В частности, код C ++, такой как сетевая библиотека RakNet.
Можно ли вызвать код C ++, возможно, скомпилированный как файл библиотеки кода (.dll), из языка .NET, такого как C #?
В частности, код C ++, такой как сетевая библиотека RakNet.
Один из простых способов вызвать C ++ - создать сборку оболочки в C ++ / CLI. В C ++ / CLI вы можете вызывать неуправляемый код, как если бы вы писали собственный код, но вы можете вызывать код C ++ / CLI из C #, как если бы он был написан на C #. Этот язык был в основном разработан с возможностью взаимодействия с существующими библиотеками в качестве своего «приложения-убийцы».
Например - скомпилируйте это с переключателем / clr
#include "NativeType.h"
public ref class ManagedType
{
NativeType* NativePtr;
public:
ManagedType() : NativePtr(new NativeType()) {}
~ManagedType() { delete NativePtr; }
void ManagedMethod()
{ NativePtr->NativeMethod(); }
};
Затем в C # добавьте ссылку на сборку ManagedType и используйте ее так:
ManagedType mt = new ManagedType();
mt.ManagedMethod();
Ознакомьтесь с это сообщение в блоге, чтобы получить более объясненный пример.
P / Invoke - отличная технология, и она работает довольно хорошо, за исключением проблем с загрузкой целевого файла DLL. Мы обнаружили, что лучший способ сделать это - создать статическую библиотеку собственных функций и связать ее с проектом Managed C ++ (или C ++ / CLI), который от нее зависит.
Я не знаком с упомянутой вами библиотекой, но в целом есть несколько способов сделать это:
Да, это называется P / Invoke.
Вот отличный ресурс для использования с Win32 API:
Уверенный. Эта статья является хорошим примером того, что вы можете сделать, чтобы приступить к этому.
Мы делаем это с C # на наших устройствах Windows Mobile с помощью P / Invoke. .
Используемая для этого технология называется P / Invoke; вы можете искать статьи по этой теме. Обратите внимание, что это для вызова C из C #, а не для C ++. Поэтому вам нужно обернуть свой код C ++ в оболочку C, которую экспортирует ваша DLL.
Вы думали об Apache Thrift?
Похоже, очень-очень изящное решение.