Можно вызвать код C ++ из C #?
Можно ли вызвать код C ++, возможно, скомпилированный как файл библиотеки кода (DLL), с языка .NET, такого как C #?
В частности, код C ++, такой как сетевая библиотека RakNet.
- Разница между управляемым и неуправляемым in-app продуктом Android?
- Доступ к инъецируемой зависимости в конструкторе управляемого компонента вызывает NullPointerException
- Вызов функции PInvoke '' не сбалансировал стек
- Вызовите действие управляемого компонента JSF при загрузке страницы
- Как реализовать интерфейс обратного вызова из неуправляемой DLL в .net-приложение?
Одним из простых способов вызова на C ++ является создание сборки обертки в C ++ / CLI. В C ++ / CLI вы можете вызвать неуправляемый код, как если бы вы писали собственный код, но вы можете вызвать код C ++ / CLI из C #, как если бы он был написан на C #. Язык был в основном разработан с interop в существующие библиотеки как «приложение-убийца».
Например – скомпилируйте это с помощью переключателя / 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 / Вызов для экспорта функций библиотеки
- Добавление ссылки на библиотеку типа COM (в случае, если вы имеете дело с объектами COM).
P / Invoke – хорошая технология, и она работает достаточно хорошо, за исключением проблем при загрузке целевого DLL-файла. Мы обнаружили, что лучший способ сделать это – создать статическую библиотеку собственных функций и связать это с управляемым C ++ (или C ++ / CLI) проектом, который зависит от него.
Да, это называется P / Invoke .
Вот отличный ресурс для использования с Win32 API:
Уверенный. Эта статья является хорошим примером того, что вы можете сделать, чтобы начать с этого.
Мы делаем это с C # на наших устройствах Windows Mobile, используя P / Invoke .
Технология, используемая для этого, называется P / Invoke ; вы можете искать статьи по этому вопросу. Обратите внимание, что это для вызова C из C #, а не C ++. Поэтому вам нужно обернуть свой код на C ++ в обертку C, которую экспортирует ваша DLL.
Вы рассматривали Apache Thrift?
Это кажется очень очень аккуратным решением.