Envolvendo Visual C ++ em C #
-
08-07-2019 - |
Pergunta
Eu preciso fazer alguma injeção processo usando C ++, mas eu preferiria usar C # para tudo que não seja as coisas de baixo nível. Ouvi falar de "embrulho função" e "empacotamento" e ter feito um pouco de Google busca e encontraram pedaços de informação aqui e ali, mas ainda estou realmente falta.
As coisas que tenho lido, a fim de utilidade;
http://msdn.microsoft.com/en-us /library/ms235281(VS.80).aspx
http://www.drdobbs.com/cpp/184401742
http://geeklit.blogspot.com/2006/ 08 / chamando-c-lib-de-c.html
Como posso envolver todo o material nível inferior (C ++ nativo) em C # para que eu possa facilmente comandar essas funções em uma língua que eu estou mais confortável com, C #?
Qualquer informação sobre o tema é muito apreciado.
Solução
Eu acho P / Invoke é realmente a abordagem mais simples:
- Criar um DLL no não gerenciado C ++, contendo todas as funcionalidades que você precisa fazer a injeção.
- Em seu código C #, declarar alguns métodos
static extern
, e usar o atributoDllImport
apontar-lhes a sua DLL C ++. Para mais detalhes, consulte o link fornecido por arul em sua resposta .
Note que P / Invoke não se limita a "funções API do Windows." - você pode chamar funções expostos por qualquer DLL nativa
A desvantagem potencial de P / Invoke é que você terá que fornecer as assinaturas para as suas funções em C ++, possivelmente especificando alguns triagem menos do que óbvio. Nesse caso, você poderia considerar a construção de um servidor COM em vez de um "simples" DLL, e usando interoperabilidade para chamar seu código de C #.
Outras dicas
Você quer usar P / Invoke, consulte MSDN Magazine .
Se Pinvoking não o que você quer fazer é, em seguida, criar um aplicativo gerenciado C ++. Use C ++ nativo para fazer as coisas injeção processo. Use c conseguiu ++ para criar uma interface amigável .NET para este comportamento nativa. Este pode então ser chamado de C #.