Можно ли вызвать код 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 Mobile с помощью P / Invoke.
технология, используемая для этого, называется P / Invoke; вы можете искать статьи по этой теме. Обратите внимание, что он предназначен для вызова C из C#, а не c++. Поэтому вам нужно будет обернуть код C++ в оболочку C, которую экспортирует ваша DLL.