2009-08-20 5 views
20

Ho un'interfaccia definita in un file IDL che vorrei usare in C#. C'è un modo per convertire l'IDL in qualcosa utilizzabile in C#?Converti file IDL di interfaccia in C#

+0

Che cos'è "qualcosa di utile"? – Achim

+0

Qualcosa utilizzabile in C#. Qualcosa che verrà compilato. –

risposta

27

Un modo è quello di eseguire MIDL sull'IDL per creare una libreria di tipi (.tlb). Ciò richiede un blocco library nell'IDL. Una volta ottenuto il file .tlb, è possibile eseguire tlbimp.exe su di esso per ottenere una definizione C#/Interop DLL.

+0

e quindi è possibile utilizzare [JetBrains dotPeek] (https://www.jetbrains.com/decompiler/) per visualizzare la definizione C# dalla DLL di interoperabilità generata. –

4

Quali tipi di dati/strutture sono utilizzati nell'IDL? È necessario innanzitutto definire i tipi di dati in C# se non è già presente un tipo inbuild.

È possibile utilizzare il seguente strumento per convertire le strutture, ma è necessario verificare manualmente l'uscita.

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

Questo programma di utilità è descritto in Accessing Windows API Constants and Structs for P/Invoke.

L'articolo originale di gennaio 2008 è ora disponibile solo come .CHM help file download, collegato nella parte inferiore di https://msdn.microsoft.com/magazine/msdn-magazine-issues. Per il momento, il codice sorgente può essere trovato a http://clrinterop.codeplex.com/.

+0

Dov'è la documentazione per questo> ?? –

+1

@ChandraEskay Poiché il collegamento all'articolo MSDN non era più corretto, mi sono permesso di aggiornare le informazioni su questa utilità. –

1

Ad esempio, ho recentemente utilizzato l'API XPS Print e ho avuto bisogno delle interfacce xpsobjectmodel.h. Windows SDK viene fornito con xpsobjectmodel.idl per fortuna.

Ho generato il file TLB con MIDL prima e utilizzato TLBIMP per generare un assembly DLL corretto pronto per essere aggiunto nella sezione "Riferimenti ..." nel mio progetto C#.

Assicurarsi di utilizzare gli strumenti con la versione corretta per la struttura del progetto. ad esempio, se il framework del progetto è basato su 3.5, l'uso di tlbimp dal set di strumenti 4.0 non funzionerà.