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:
E tem também a opção de você digitar a assinatura e ela criar a chamada gerenciada:
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:
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:
tools,
p/invoke
Ninguém avaliou. Dê sua nota!
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5