Чи можна викликати код 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. Ми виявили, що найкращий спосіб зробити це - створити статичну бібліотеку власних функцій і зв’язати це з керованим проектом C ++ (або C ++ / CLI), який залежить від цього.
Так, це називається P / Invoke .
Ось чудовий ресурсний сайт для його використання з Win32 API:
Звичайно. Ця стаття є хорошим прикладом того, що ви можете зробити, щоб розпочати з цього.
Ми робимо це з C # на наших пристроях Windows Mobile за допомогою P / Invoke .
Технологія, яка використовується для цього, називається P / Invoke ; ви можете шукати статті на цю тему. Зверніть увагу, що це для виклику C з C #, а не C ++ настільки. Тож вам потрібно буде обернути ваш код C ++ у оболонку C, яку експортує ваша DLL.