2009-03-30 4 views
8

Ich versuche, das Microsoft Debug Interface Access SDK von C# zu verwenden. Dies wird mit Visual Studio installiert, aber die Dokumente scheinen nicht zu erwähnen, wie Sie dies aus C# verwenden.Wie verwende ich das MS DIA SDK von C#?

Ich habe Beispielcode für interweb gefunden, aber keine Informationen zum Verknüpfen mit dem DIA SDK. I.e. Ich kann es nicht als Assembly importieren. Ich glaube nicht, dass ich es in eine gemanagte C++ - Anwendung einbinden muss und es als COM verwenden muss (das wäre die Hölle).

Es gibt eine IDL-Datei, ist das der richtige Weg? Wenn das so ist, wie?


Edit: Im Folgenden wird die Typbibliothek für die Verwendung als referenzierte Assembly erstellen. In eine Stapeldatei einfügen.

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

Antwort

15

Sie müssen zuerst die IDL zu einem typelib konvertieren:

Etwas wie:

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

Dann können Sie den TLB importieren.

Ich habe das DIA SDK nie auf diese Weise verwendet, also weiß nicht, wie freundlich es wäre. Sie könnten auch in Betracht ziehen, es direkt von einer verwalteten C++ - Assembly zu verwenden und eine verwaltete Schnittstelle für die von Ihnen benötigte Funktionalität bereitzustellen.

+0

Dank laufen. Würde das den DllImport PInvoke-Kram verwenden? – Nick

+0

Sie haben gesagt, dass Sie "das DIA SDK auf diese Weise nie benutzt haben". Wenn Sie es nicht so benutzen, wie benutzen Sie es? – Nick

+0

Sobald Sie tlbimp auf dem generierten tlb ausgeführt haben, sollten Sie eine Assembly abrufen, auf die Sie aus Ihrem verwalteten Code verweisen können. Die Assembly führt den COM-Interop von Ihnen aus und es ist nicht notwendig, irgendetwas zu dl-import oder P-invoice. Ich habe es nur aus unmanaged C++ –

2

Die vorherigen Anweisungen funktionierten, aber einige Aktualisierung benötigt. VSINSTALLDIR existiert nicht mehr (und ist mehrdeutig, wenn mehrere VS-Versionen installiert sind). Daher habe ich die Anweisungen verallgemeinert und korrigiert. Hier ist eine VS 2015-Version:

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

Ändern Sie VS140 zu entsprechen, welche Version Sie versuchen zu verwenden.

Dies erstellt dia2lib.dll, die ich als Referenz hinzugefügt - mit der rechten Maustaste auf Verweise, Verweis hinzufügen, Durchsuchen, finde die Datei. Es funktioniert und ich kann jetzt Symbolsort erstellen und ausführen.

1

Falls jemand Probleme mit dem Pfad hat, hier ist das, was für mich für VS arbeitete 2017.

  1. öffnen x86_x64 Kreuz Tools-Eingabeaufforderung (vom Start/Programme/Visual Studio 2017 im Administratormodus

    )
  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

Die Dia2Lib.dll ist jetzt im C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional Ordner.

Mit es in C# code Ich habe nicht registrierte dll Ausnahme!Ich hatte

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

zu bekommen dieses Problem gelöst

Verwandte Themen