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".
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.
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.
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.
fonte
Não estou familiarizado com a biblioteca que você mencionou, mas, em geral, existem algumas maneiras de fazer isso:
fonte
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.
fonte
Sim, é denominado P / Invoke .
Este é um ótimo site de recursos para usá-lo com a API Win32:
http://www.pinvoke.net/
fonte
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 .
fonte
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.
fonte
Você já considerou o Apache Thrift?
http://thrift.apache.org/
Parece uma solução muito legal.
fonte