SlideShare une entreprise Scribd logo
1  sur  16
Gabriel Guilherme
Formação acadêmica
Pó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 profissional
Atualmente 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 de
telecomunicaçõ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.
O principal componente para utilizar o PInvoke é o Runtime’s Marshalling Service que é
disponibilizado pelo CLR (Common Language Runtime). O PInvoke permite acessar funções
globais expostas por:
   DLL Win32;
   COM.
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!
Tanto para o PInvoke quanto para C++ CLI é necessário converter as
string nativas (STL, char* e char[] ) para as string gerenciadas.


No PInvoke é necessário explicitar o offset da string ou trabalhar com
uma struct de layout sequencial tanto no código C++ quanto no código
.NET.
Já no C++ CLI é necessário utilizar o Marshalling Service para que
strings sejam convertidas e alocadas corretamente na memória.
No PInvoke os callbacks são definidos por ponteiros de função que são mapeados no .NET como
delegates.
No PInvoke não permite passar os containers STL nas chamadas de função por não conhecemos o
layout 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 a
função e assim fazer trabalhar com os elementos.
Já C++ CLI basta copiar os elementos do array ou container para a collection gerenciada.
Todos os elementos alocados pelo .NET são coletados pelo garbage collector, assim gerando um
efeito que exige um pouco mais de atenção por que se uma instância gerenciada for passada para o
C++ como, por exemplo, uma referência de callback. É necessário garantir que garbage collector não
irá remove-la antes do termino do seu uso.
Ferramenta que mostra o código IL gerado para lidar com a troca de dados e formato do código
gerenciado e código nativo.(http://blogs.msdn.com/b/dotnet/archive/2009/08/10/improvements-to-
interop-marshaling-in-v4-il-stubs-everywhere.aspx)
O principal comando para trabalhar com o .NET e o WinDbg é o “.loadby sos clr” que carregas as
extensõ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
Contato:
       E-mail: gabriel@cppcoder.com
       Twitter: @_GabrielGuilher
       LinkedIn: http://www.linkedin.com/profile/view?id=25603607&trk=tab_pro




Referê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

Contenu connexe

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

Fundamentos do .NET Framework - Parte 1
Fundamentos do .NET Framework - Parte 1Fundamentos do .NET Framework - Parte 1
Fundamentos do .NET Framework - Parte 1Julian Correa
 
Apostila de Introdução ao C#.net
Apostila de Introdução ao C#.netApostila de Introdução ao C#.net
Apostila de Introdução ao C#.netAndre Nascimento
 
Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4CDS
 
Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Alexandre Tarifa
 
Vetorização e Otimização de Código - Intel Software Conference 2013
Vetorização e Otimização de Código - Intel Software Conference 2013Vetorização e Otimização de Código - Intel Software Conference 2013
Vetorização e Otimização de Código - Intel Software Conference 2013Intel Software Brasil
 
Codificação segura em C para sistemas embarcados
Codificação segura em C para sistemas embarcadosCodificação segura em C para sistemas embarcados
Codificação segura em C para sistemas embarcadoshenriqueprossi
 
ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010Norton Guimarães
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicRicardo Guerra Freitas
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com AngularElmano Cavalcanti
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação CJose Augusto Cintra
 
Conhecendo a Plataforma .NET
Conhecendo a Plataforma .NETConhecendo a Plataforma .NET
Conhecendo a Plataforma .NETPedro Alves Jr.
 
DotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - IntroduçãoDotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - IntroduçãoLorival Smolski Chapuis
 
Qualidade no desenvolvimento de software
Qualidade no desenvolvimento de softwareQualidade no desenvolvimento de software
Qualidade no desenvolvimento de softwareDennes Torres
 
Geração de código linguagem c
Geração de código   linguagem cGeração de código   linguagem c
Geração de código linguagem cJefferson Bessa
 

Similaire à TDC 2012 - Integração .NET x C++ (20)

Novidades do .Net 4.0
Novidades do .Net 4.0Novidades do .Net 4.0
Novidades do .Net 4.0
 
Fundamentos do .NET Framework - Parte 1
Fundamentos do .NET Framework - Parte 1Fundamentos do .NET Framework - Parte 1
Fundamentos do .NET Framework - Parte 1
 
Apostila de Introdução ao C#.net
Apostila de Introdução ao C#.netApostila de Introdução ao C#.net
Apostila de Introdução ao C#.net
 
Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4
 
Introdução ao C#
Introdução ao C#Introdução ao C#
Introdução ao C#
 
Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010
 
DotNet Remoting - .NET framework
DotNet Remoting - .NET frameworkDotNet Remoting - .NET framework
DotNet Remoting - .NET framework
 
Introdução C#
Introdução C#Introdução C#
Introdução C#
 
Vetorização e Otimização de Código - Intel Software Conference 2013
Vetorização e Otimização de Código - Intel Software Conference 2013Vetorização e Otimização de Código - Intel Software Conference 2013
Vetorização e Otimização de Código - Intel Software Conference 2013
 
Codificação segura em C para sistemas embarcados
Codificação segura em C para sistemas embarcadosCodificação segura em C para sistemas embarcados
Codificação segura em C para sistemas embarcados
 
ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual Basic
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com Angular
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Apostila de C# & Asp.Net
Apostila de C# & Asp.NetApostila de C# & Asp.Net
Apostila de C# & Asp.Net
 
Conhecendo a Plataforma .NET
Conhecendo a Plataforma .NETConhecendo a Plataforma .NET
Conhecendo a Plataforma .NET
 
DotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - IntroduçãoDotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - Introdução
 
Qualidade no desenvolvimento de software
Qualidade no desenvolvimento de softwareQualidade no desenvolvimento de software
Qualidade no desenvolvimento de software
 
Geração de código linguagem c
Geração de código   linguagem cGeração de código   linguagem c
Geração de código linguagem c
 

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

  • 1.
  • 2.
  • 3. Gabriel Guilherme Formação acadêmica Pó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 profissional Atualmente 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 de telecomunicaçõ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.
  • 4. O principal componente para utilizar o PInvoke é o Runtime’s Marshalling Service que é disponibilizado pelo CLR (Common Language Runtime). O PInvoke permite acessar funções globais expostas por:  DLL Win32;  COM.
  • 5. 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!
  • 6.
  • 7. Tanto para o PInvoke quanto para C++ CLI é necessário converter as string nativas (STL, char* e char[] ) para as string gerenciadas. No PInvoke é necessário explicitar o offset da string ou trabalhar com uma struct de layout sequencial tanto no código C++ quanto no código .NET.
  • 8. Já no C++ CLI é necessário utilizar o Marshalling Service para que strings sejam convertidas e alocadas corretamente na memória.
  • 9. No PInvoke os callbacks são definidos por ponteiros de função que são mapeados no .NET como delegates.
  • 10.
  • 11. No PInvoke não permite passar os containers STL nas chamadas de função por não conhecemos o layout 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 a função e assim fazer trabalhar com os elementos. Já C++ CLI basta copiar os elementos do array ou container para a collection gerenciada.
  • 12. Todos os elementos alocados pelo .NET são coletados pelo garbage collector, assim gerando um efeito que exige um pouco mais de atenção por que se uma instância gerenciada for passada para o C++ como, por exemplo, uma referência de callback. É necessário garantir que garbage collector não irá remove-la antes do termino do seu uso.
  • 13.
  • 14. Ferramenta que mostra o código IL gerado para lidar com a troca de dados e formato do código gerenciado e código nativo.(http://blogs.msdn.com/b/dotnet/archive/2009/08/10/improvements-to- interop-marshaling-in-v4-il-stubs-everywhere.aspx)
  • 15. O principal comando para trabalhar com o .NET e o WinDbg é o “.loadby sos clr” que carregas as extensõ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
  • 16. Contato:  E-mail: gabriel@cppcoder.com  Twitter: @_GabrielGuilher  LinkedIn: http://www.linkedin.com/profile/view?id=25603607&trk=tab_pro Referê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