Pergunta

Eu gostaria de criar um projeto C # e implementar a (C ++) código existente nativa. Alguém sabe sobre qualquer bom tutorial sobre isso?

Obrigado!

Foi útil?

Solução

Você pode usar P / Invoke e você pode chamar métodos não gerenciados. Vou postar alguns exemplos: Este é uma referência a documentação oficial MSDN. Este é um site mantida comunidade com a maioria das bibliotecas não gerenciadas comuns do Windows junto com assinaturas de métodos e exemplos

Outras dicas

Se o seu código C ++ é gerido (como você diz), então eu sugiro que você deixá-lo como C ++ menos você tem uma boa razão para - futuro C # (etc.) assembleias deve ser capaz de simplesmente fazer referência a ela 'como está'.

Eu assumo pelo implementar o código existente quer dizer que você quiser chamá-lo de C #, com alterações mínimas no código C ++.

Eu sou um fã e recente comprador do livro C ++ / CLI em Ação que tem um par de capítulos de amostra úteis online.

Este introdução em CodeProject é um ponto de partida bom.

O autor do C ++ / CLI em Ação tem uma série de artigos sobre CodeProject, desça até a ++ / CLI secção C em seu índice .

O href="http://en.wikipedia.org/wiki/Platform_Invocation_Services" rel="nofollow artigo Wikipedia em P / Invoke tem uma série de razões pelas quais você pode não querer para usar essa abordagem, com a qual concordo:

  • perda de apoio de digitação pelo compilador
  • questões
  • possível de tipos de dados ou de alinhamento como você tem que mapear tipos de mão
  • necessidade de objetos de coleta de lixo de pinos

O melhor ponto de partida no MSDN é a resumo do artigo .

Provavelmente a maneira mais fácil de fazer isso é criar um projeto C ++ / CLI, o que permitirá a você misturar gerenciados e não gerenciados C ++. Você pode em seguida, enrole as classes seu não gerenciado C ++ existente com um gerenciado .Net wrapper que seu código C # pode chamar diretamente. revista MSDN tem uma boa introdução artigo em C ++ / CLI.

Interop só vai realmente ser útil para chamar funções de estilo C. Você não pode realmente usá-lo para interagir com as classes C ++ puro.

Eu aprendi isso fazendo isso, então eu não tenho um bom tutorial, mas há algumas coisas que você precisa estar ciente de - C conseguiu ++ e C ++ / CLI tanto integrar com código não gerenciado com muito poucas costuras feias. Este não é o caso com C #. Em gerenciado C ++, é bastante possível fazer algo parecido com isto:

dotNetForm->Text = S"My Project"; // regular managed code
::SetWindowText(dotNetForm->Handle, "Your Project"); // mixed managed/unmanaged

enquanto que em C # você teria que P / Invoke para SetWindowText - não que você realmente faria: é apenas um exemplo simples, mas você precisa estar ciente de que o compilador C ++ gerenciado é uma combinação estranha de fazer um monte de interoperabilidade para você de forma transparente e não fazer nada para você, ao mesmo tempo (ou seja, ele não fará nenhum marashalling implícita).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top