Fazer chamadas em P/Invoke nunca foi algo muito divertido. Se fosse, não teríamos referências de assinaturas em sites como o excelente Pinvoke.Net (com seu excelente Add-in para o Visual Studio, que comentei na edição 41 da .Net Magazine). Já vi até desenvolvedor que mantinha uma pequena coleção de assinaturas de métodos guardados, caso precisasse, tão chato é criar esse tipo de coisa do zero.

Qual não foi minha surpresa ao perceber que o Jarred Parsons, da equipe do VB.Net, desenvolveu uma ferramenta para facilitar esse trabalho, chamada de P/Invoke Interop Assistant (atualmente na versão 1.0), e falou sobre ela em Janeiro deste ano, e eu não vi? Só fiquei sabendo quando ele blogou a respeito no blog do time do VB. Baixei na hora, testei, e posso afirmar: funciona muito bem.

Ela tem uma busca por assinaturas conhecidas, com essa busca que fiz do RegQueryReflectionKey, advapi32.dll:

PIIteropAssist  

E tem também a opção de você digitar a assinatura e ela criar a chamada gerenciada:

PIIteropAssist2  

Notem que a ferramenta reconhece chamadas de assinaturas conhecidas como essa que fiz da função FindFirstFileW, e corretamente puxou a referência para kernel32.dll. Além disso, como a função tem estruturas dependentes, ela também trouxe o código destas estruturas. No exemplo acima vocês podem ver a estrutura FILETIME, e mais acima, sem aparecer, existe a WIN32_FIND_DATAW.

Agora, se você está trabalhando em uma equipe mista, que usa código gerenciado e não gerenciado, ela também ajuda. Ela pode não conhecer a referência à sua dll, e as estrutura, mas ela consegue compor a assinatura mesmo assim. Dêem uma olhada, com uma função que inventei:

PIIteropAssist3

Ela gera o código em C# e em VB e se preocupa com vários aspectos complexos de marshalling, para oferecer performance às chamadas. Não bastasse tudo isso, também oferece suporte à tradução de métodos gerenciados para não gerenciados.

Sem dúvida é uma para manter no toolbox, e acompanhar as novas versões.


Postado na(s) categoria(s) pelo Giovanni Bassi em 16 de março de 2008 às 13:40 | Tags: ,

Ninguém avaliou. Dê sua nota!

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Comentar


(Vai mostrar seu Gravatar)  

  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading



Quem é Giovanni Bassi

Giovanni Bassi Sou uma pessoa apaixonada por tecnologia e especificamente por .Net. Gerencio uma fábrica de software, gosto muito de arquitetura e engenharia de software, publico artigos e edito a .Net Magazine. Dou umas palestras e cursos de vez em quando, e quando dá tempo eu respiro um pouco. Mais detalhes nesta página.

Selos

Web Days 2008

MCPD

MCSD

.Net Magazine

Calendário

«  agosto 2008  »
seteququsedo
28293031123
45678910
11121314151617
18192021222324
25262728293031
1234567
Ver detalhamento de posts no calendário

Postagens recentes

Comentários recentes

Disclaimer / Aviso
As opiniões colocadas neste blog são minhas e pessoais e não expressam necessariamente as opiniões de meus empregadores, pareceiros e amigos. Da mesma forma, os comentários feitos por leitores do blog não expressam a minha opinião.

© Copyright 2008 .Net Unplugged
Sign in