Gabriel Guilherme tem formação em ciência da computação e técnico em telecomunicações. Trabalha atualmente com desenvolvimento de sistemas financeiros e tem 7 anos de experiência com desenvolvimento e integração de softwares de telecomunicações. Possui certificações da Microsoft como MCP Developer e MCTS.
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