2009-03-30 26 views
8

Estoy tratando de usar Microsoft Debug Interface Access SDK desde C#. Esto se instala con Visual Studio, pero los documentos no parecen mencionar cómo se usa esto desde C#.¿Cómo uso MS DIA SDK desde C#?

He encontrado un código de ejemplo en interweb pero no información sobre cómo vincularlo con el SDK de DIA. Es decir. No puedo importarlo como un conjunto. No creo que deba incluirlo en una aplicación administrada de C++ y usarlo como COM (sería un infierno).

Hay un archivo IDL, ¿es esta la manera correcta? ¿Si es así, cómo?


Editar: El siguiente creará la biblioteca de tipo para su uso como un conjunto de referencia. Pegar en un archivo por lotes.

call "%VS80COMNTOOLS%\vsvars32.bat" 
midl /I "%VSINSTALLDIR%\DIA SDK\include" "%VSINSTALLDIR%\DIA SDK\idl\dia2.idl" /tlb dia2.tlb 
tlbimp dia2.tlb 

Respuesta

15

es necesario convertir el IDL a una biblioteca de tipos primero:

Algo así como:

midl /I "%VSINSTALLDIR%\DIA SDK\include" dia2.idl /tlb dia2.tlb 
tlbimp dia2.tlb 

A continuación, puede importar el TLB.

Nunca he usado el SDK de DIA de esta manera, así que no sé qué tan amigable sería. También podría considerar usarlo directamente desde un ensamblaje administrado de C++ y presentar una interfaz administrada para la funcionalidad que necesita.

+0

Gracias. ¿Sería eso usar el material de DllImport PInvoke? – Nick

+0

Has dicho que "nunca usaste el SDK de DIA de esta manera". Si no lo usa de esa manera, ¿cómo lo usa? – Nick

+0

Una vez que haya ejecutado tlbimp en el tlb generado, debe obtener un ensamblado al que pueda hacer referencia desde su código administrado. El conjunto hará la interoperabilidad COM de usted y no es necesario importar o invocar nada. Solo lo he usado desde C++ no administrado –

2

Las instrucciones anteriores funcionaban, pero necesitaban algunas actualizaciones. VSINSTALLDIR ya no existe (y es ambiguo cuando tiene varias versiones de VS instaladas), por lo que generalicé y corregí las instrucciones. Aquí hay una versión VS 2015:

"%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" amd64 
set DIASDK=%VS140COMNTOOLS%..\..\DIA SDK 
midl /I "%DIASDK%\include" "%DIASDK%\idl\dia2.idl" /tlb dia2.tlb 
tlbimp dia2.tlb 

Cambie VS140 para que coincida con la versión que esté intentando usar.

Esto creó dia2lib.dll que agregué como referencia - haga clic derecho en Referencias, Agregue referencia, Examine, busque el archivo. Funciona y ahora puedo construir y ejecutar SymbolSort.

1

En caso de que alguien tiene problemas con el camino, esto es lo que funcionó para mí para VS 2017.

  1. abierto x86_x64 Cruz comandos de las herramientas (desde Inicio/Programas/Visual Studio 2017 en el modo Administrador)

  2. cd C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional

  3. midl /I "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\DIA SDK\idl";"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\DIA SDK\include" dia2.idl /tlb dia2.tlb

  4. tlbimp dia2.tlb

El Dia2Lib.dll se encuentra ahora en la carpeta C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional.

Utilizándolo en el código C# ¡Obtuve la excepción no registrada dll!Tuve que correr

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\DIA SDK\bin>regsvr32 msdia140.dll

a resolver esto

Cuestiones relacionadas