É possível chamar o código C ++, possivelmente compilado como um arquivo de biblioteca de código (.dll), de dentro de uma linguagem .NET como C #?
Especificamente, o código C ++, como a biblioteca de rede RakNet.
É possível chamar o código C ++, possivelmente compilado como um arquivo de biblioteca de código (.dll), de dentro de uma linguagem .NET como C #?
Especificamente, o código C ++, como a biblioteca de rede RakNet.
Respostas:
Uma maneira fácil de chamar em C ++ é criar um assembly de wrapper em C ++ / CLI. Em C ++ / CLI, você pode chamar o código não gerenciado como se estivesse escrevendo um código nativo, mas pode chamar o código C ++ / CLI de C # como se ele tivesse sido escrito em C #. A linguagem foi basicamente projetada com interoperabilidade em bibliotecas existentes como seu "aplicativo matador".
Por exemplo - compile isso com a opção / clr
#include "NativeType.h"
public ref class ManagedType
{
NativeType* NativePtr;
public:
ManagedType() : NativePtr(new NativeType()) {}
~ManagedType() { delete NativePtr; }
void ManagedMethod()
{ NativePtr->NativeMethod(); }
};
Então, em C #, adicione uma referência ao seu assembly ManagedType e use-a assim:
ManagedType mt = new ManagedType();
mt.ManagedMethod();
Confira esta postagem do blog para um exemplo mais explicado.
Não estou familiarizado com a biblioteca que você mencionou, mas, em geral, existem algumas maneiras de fazer isso:
P / Invoke é uma boa tecnologia e funciona muito bem, exceto para problemas ao carregar o arquivo DLL de destino. Descobrimos que a melhor maneira de fazer as coisas é criar uma biblioteca estática de funções nativas e vinculá-la a um projeto Managed C ++ (ou C ++ / CLI) que dependa dela.
Sim, é denominado P / Invoke .
Este é um ótimo site de recursos para usá-lo com a API Win32:
Claro que é. Este artigo é um bom exemplo de algo que você pode fazer para começar.
Fazemos isso em C # em nossos dispositivos Windows Mobile usando P / Invoke .
A tecnologia usada para fazer isso é chamada P / Invoke ; você pode pesquisar artigos sobre o assunto. Observe que é para chamar C a partir de C #, não tanto C ++. Portanto, você precisará envolver seu código C ++ em um wrapper C que sua DLL exporta.