Можно ли вызвать код C++ из C#?
можно ли вызвать код C++, возможно, скомпилированный как файл библиотеки кода (.dll), из языка .NET, такого как C#?
в частности, код C++, такой как сетевая библиотека RakNet.
7 ответов:
один простой способ вызова в 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 для экспортируемых функций библиотеки
- добавить ссылку на библиотеку типов com (В случае, если вы имеете дело с COM-объектами).
P / Invoke-хорошая технология, и она работает довольно хорошо, за исключением проблем с загрузкой целевого DLL-файла. Мы обнаружили, что лучший способ сделать это-создать статическую библиотеку собственных функций и связать ее с управляемым проектом C++ (или C++/CLI), который зависит от него.
Да, это называется P / Invoke.
вот отличный ресурс сайта для использования его с Win32 API:
конечно. в этой статье это хороший пример того, что вы можете сделать, чтобы начать работу над этим.
мы делаем это с C# на наших мобильных устройствах Windows, используя P / Invoke.
технология, используемая для этого, называется P / Invoke; вы можете искать статьи по этой теме. Обратите внимание, что это для вызова C из C#, а не C++ так много. Поэтому вам нужно будет обернуть свой код C++ в оболочку C, которую экспортирует ваша DLL.