TDC 2012 - Integração .NET x C++

544 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
544
No SlideShare
0
A partir de incorporações
0
Número de incorporações
108
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

TDC 2012 - Integração .NET x C++

  1. 1. Gabriel GuilhermeFormação acadêmicaPós graduação em Arquitetura de TI, FIAP.Graduado em ciência da computação, Anhembi Morumbi.Técnico em Telecomunicações, Colégio técnico Oswaldo Cruz.Experiência profissionalAtualmente trabalhando com desenvolvimento de sistemas de alto desempenho para o mercado financeiro.Experiência de 7 anos trabalhando com desenvolvimento e integração de softwares / sistemas detelecomunicações (IVR, WFM, CTI, Softphones e PBX).Certificações (MCP ID: 6711820)Microsoft Certified Professional Developer - Web Developer.Microsoft Certified Technology Specialist - .NET Framework 2.0: Distributed Applications.Microsoft Certified Technology Specialist - .NET Framework 2.0: Web Applications.Microsoft Certified Technology Specialist - .NET Framework 4.0: Service Communication Applications.
  2. 2. O principal componente para utilizar o PInvoke é o Runtime’s Marshalling Service que édisponibilizado pelo CLR (Common Language Runtime). O PInvoke permite acessar funçõesglobais expostas por: DLL Win32; COM.
  3. 3. O C++ CLI é uma linguagem do .NET framework que tem uma sintax semelhante com a do C++. Mas é importante lembrar que a execução depende diretamente do .NET Framework. Porém há uma característica interessante que é o modo de compilação misto que permite utilizar código C++ puro e código C++ CLI. A interoperabilidade gera código objeto gerenciado e não gerenciado. Sempre lembrando que são executados pelo CLR e possuem características de um processo gerenciado (ThreadPool, Garbage Collector, AppDomain e etc) .OBS.: É importante lembrar que o GC atua em objetos gerenciados apenas!
  4. 4. Tanto para o PInvoke quanto para C++ CLI é necessário converter asstring nativas (STL, char* e char[] ) para as string gerenciadas.No PInvoke é necessário explicitar o offset da string ou trabalhar comuma struct de layout sequencial tanto no código C++ quanto no código.NET.
  5. 5. Já no C++ CLI é necessário utilizar o Marshalling Service para questrings sejam convertidas e alocadas corretamente na memória.
  6. 6. No PInvoke os callbacks são definidos por ponteiros de função que são mapeados no .NET comodelegates.
  7. 7. No PInvoke não permite passar os containers STL nas chamadas de função por não conhecemos olayout delas em memória e não é possível garantir que não será alterada.Existe a opção de passar o ponteiro do primeiro elemento do array e o tamanho do array para afunção e assim fazer trabalhar com os elementos.Já C++ CLI basta copiar os elementos do array ou container para a collection gerenciada.
  8. 8. Todos os elementos alocados pelo .NET são coletados pelo garbage collector, assim gerando umefeito que exige um pouco mais de atenção por que se uma instância gerenciada for passada para oC++ como, por exemplo, uma referência de callback. É necessário garantir que garbage collector nãoirá remove-la antes do termino do seu uso.
  9. 9. Ferramenta que mostra o código IL gerado para lidar com a troca de dados e formato do códigogerenciado e código nativo.(http://blogs.msdn.com/b/dotnet/archive/2009/08/10/improvements-to-interop-marshaling-in-v4-il-stubs-everywhere.aspx)
  10. 10. O principal comando para trabalhar com o .NET e o WinDbg é o “.loadby sos clr” que carregas asextensões de depuração para código gerenciado. Página da Microsoft com os principais comandos:http://msdn.microsoft.com/en-us/library/bb190764.aspx
  11. 11. Contato: E-mail: gabriel@cppcoder.com Twitter: @_GabrielGuilher LinkedIn: http://www.linkedin.com/profile/view?id=25603607&trk=tab_proReferências:  http://technet.microsoft.com/en-us/library/bb497008  http://www.pinvoke.net/  http://msdn.microsoft.com/en-us/magazine/cc164123.aspx  http://msdn.microsoft.com/en-us/magazine/cc163605.aspx  http://msdn.microsoft.com/en-us/library/eaw10et3.aspx  http://msdn.microsoft.com/en-us/library/367eeye0%28VS.80%29.aspx

×