2009-03-30 6 views
8

J'essaie d'utiliser le Microsoft Debug Interface Access SDK de C#. Ceci est installé avec Visual Studio, mais les documents ne semblent pas mentionner comment vous l'utilisez à partir de C#.Comment utiliser le SDK MS DIA à partir de C#?

J'ai trouvé un exemple de code sur interweb mais aucune information sur la façon de lier le SDK DIA. C'est à dire. Je ne peux pas l'importer en tant qu'assemblage. Je ne pense pas que je dois l'inclure dans une application C++ gérée et l'utiliser COM (ce serait l'enfer).

Il existe un fichier IDL, est-ce la bonne façon? Si c'est le cas, comment?


Edit: Ce qui suit va créer la bibliothèque de type pour être utilisé comme ensemble référencé. Coller dans un fichier batch.

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

Répondre

15

Vous devez convertir le IDL à un typelib premier:

Quelque chose comme:

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

Ensuite, vous pouvez importer le TLB.

Je n'ai jamais utilisé le SDK DIA de cette façon, donc je ne sais pas à quel point ce serait sympa. Vous pouvez également envisager de l'utiliser directement à partir d'un assemblage C++ géré et de présenter une interface managée à la fonctionnalité dont vous avez besoin.

+0

Merci. Serait-ce en utilisant les trucs DllImport PInvoke? – Nick

+0

Vous avez dit que vous n'avez "jamais utilisé le SDK DIA de cette façon". Si vous ne l'utilisez pas de cette façon, comment l'utilisez-vous? – Nick

+0

Une fois que vous avez exécuté tlbimp sur la tlb générée, vous devriez obtenir un assembly que vous pouvez référencer à partir de votre code managé. L'assembly fera l'interopérabilité COM à partir de vous et il n'est pas nécessaire de dllimport ou PInvoke quoi que ce soit. Je l'ai seulement utilisé à partir de C++ non géré –

2

Les instructions précédentes fonctionnaient mais nécessitaient une mise à jour. VSINSTALLDIR n'existe plus (et est ambigu lorsque vous avez plusieurs versions VS installées) donc j'ai généralisé et corrigé les instructions. Voici une version 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 

changement VS140 pour correspondre quelle que soit la version que vous essayez d'utiliser.

Cela a créé dia2lib.dll que j'ai ajouté comme référence - cliquez avec le bouton droit sur Références, Ajouter une référence, Parcourir, recherchez le fichier. Cela fonctionne et je peux maintenant construire et exécuter des symboles.

1

Dans le cas où quelqu'un a des problèmes avec le chemin, voici ce qui a fonctionné pour moi VS 2017.

  1. Ouvrir x86_x64 Cross Outils Invite de commande (Démarrer/Programmes/Visual Studio 2017 en mode Administrateur)

  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

Le Dia2Lib.dll est maintenant dans le dossier C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional. En l'utilisant dans le code C#, j'ai obtenu une exception dll non enregistrée!Je devais courir

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

pour régler cette question

Questions connexes