2009-08-20 10 views

Respuesta

27

Una forma es ejecutar MIDL en el IDL para crear una biblioteca de tipos (.tlb). Esto requiere un bloque library en el IDL. Una vez que tenga .tlb, puede ejecutar tlbimp.exe en él para obtener una definición de C#/DLL de interoperabilidad.

+0

y luego puede usar [JetBrains dotPeek] (https://www.jetbrains.com/decompiler/) para ver la definición de C# de la DLL de interoperabilidad generada. –

4

¿Qué tipos de datos/estructuras se utilizan en el IDL? Primero debe definir los tipos de datos en C# primero si ya no hay un tipo inbuild.

Puede usar la siguiente herramienta para convertir las estructuras, pero debe verificar la salida manualmente.

Descargar: http://download.microsoft.com/download/f/2/7/f279e71e-efb0-4155-873d-5554a0608523/CLRInsideOut2008_01.exe

Esta utilidad se describe en Accessing Windows API Constants and Structs for P/Invoke.

El artículo original de enero de 2008 ahora solo está disponible como .CHM help file download, vinculado al final de https://msdn.microsoft.com/magazine/msdn-magazine-issues. Por el momento, el código fuente se puede encontrar en http://clrinterop.codeplex.com/.

+0

¿Dónde está la documentación para esto> ?? –

+1

@ChandraEskay Dado que el enlace al artículo de MSDN ya no era correcto, me tomé la libertad de actualizar la información sobre esta utilidad. –

1

Por ejemplo, recientemente utilicé la API de impresión XPS y necesitaba las interfaces xpsobjectmodel.h. El SDK de Windows viene con xpsobjectmodel.idl afortunadamente.

Primero generé el archivo TLB con MIDL y utilicé TLBIMP para generar un ensamblado DLL apropiado, listo para ser agregado en la sección 'Referencias ...' en mi proyecto C#.

Asegúrese de utilizar las herramientas con la versión correcta para su marco de proyecto. Por ejemplo, si su marco de proyecto está basado en 3.5, no funcionará usar tlbimp del conjunto de herramientas 4.0.

Cuestiones relacionadas