Можно вызвать код C ++ из C #?

Можно ли вызвать код C ++, возможно, скомпилированный как файл библиотеки кода (DLL), с языка .NET, такого как C #?

В частности, код C ++, такой как сетевая библиотека RakNet.

Одним из простых способов вызова на 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:

http://www.pinvoke.net/

Уверенный. Эта статья является хорошим примером того, что вы можете сделать, чтобы начать с этого.

Мы делаем это с C # на наших устройствах Windows Mobile, используя P / Invoke .

Технология, используемая для этого, называется P / Invoke ; вы можете искать статьи по этому вопросу. Обратите внимание, что это для вызова C из C #, а не C ++. Поэтому вам нужно обернуть свой код на C ++ в обертку C, которую экспортирует ваша DLL.

Вы рассматривали Apache Thrift?

http://thrift.apache.org/

Это кажется очень очень аккуратным решением.

Interesting Posts

Как сохранить данные, связанные с MKAnnotation, от потери после появления всплывающей подсказки и кнопки раскрытия информации пользователя?

Как выполнить команду с параметрами?

Почему нет микро USB-кабелей Micro USB?

Изображения в paintComponent отображаются только после изменения размера windows

Как определить порт, выделенный на сервере для динамически связанного обратного туннеля openssh?

Шаги по созданию веб-службы с использованием Axis2 – Код клиента

Можно ли заряжать компьютер через USB-порт?

Google In-App billing, IllegalArgumentException: намерение службы должно быть явным, после перехода на Android L Dev Preview

IDictionary в .NET 4 не ковариант

C # переключатель типа

Почему IEx64 не является значением по умолчанию для x64 Windows?

Как передать функцию шаблона в списке аргументов шаблона

Изменение системной даты программно

Альтернатива itoa () для преобразования целого в строку C ++?

Создание собственного внутреннего classа с reflectionм java

Давайте будем гением компьютера.