SlideShare una empresa de Scribd logo
1 de 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

Más contenido relacionado

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

Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4
CDS
 
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
Ricardo Guerra Freitas
 
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
Jefferson Bessa
 

Similar a 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
 

Último

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Último (6)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 

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