Convertir un fichier d'interface IDL en C #
Question
J'ai une interface définie dans un fichier IDL que je voudrais utiliser en C #. Est-il possible de convertir le IDL à quelque chose d'utilisable en C #?
La solution
La première consiste à exécuter MIDL
sur le IDL pour créer une bibliothèque de types (.tlb). Cela nécessite un bloc library
dans le IDL. Une fois que vous avez le .tlb, vous pouvez exécuter tlbimp.exe
sur elle pour obtenir une définition C # / Interop DLL.
Autres conseils
Qu'est-ce que les types de données / structures sont utilisées dans le IDL? Vous devez d'abord définir les types de données en C # d'abord s'il n'y a pas de type inbuild déjà.
Vous pouvez utiliser l'outil suivant pour convertir les structures, mais vous devez vérifier la ouput manuellement.
Télécharger: http : //download.microsoft.com/download/f/2/7/f279e71e-efb0-4155-873d-5554a0608523/CLRInsideOut2008_01.exe
Cet utilitaire est décrit à API Windows Accès Constantes et Structs P / Invoke .
L'article est maintenant uniquement disponible Janvier 2008 Original comme . CHM aide fichier télécharger , lié au bas de https://msdn.microsoft.com/magazine/msdn-magazine-issues . Pour l'instant, le code source est disponible à http://clrinterop.codeplex.com/ .
Par exemple, je l'ai récemment utilisé l'API XPS d'impression et besoin des interfaces xpsobjectmodel.h. Windows SDK est livré avec xpsobjectmodel.idl heureusement.
Je généré le fichier TLB avec MIDL premier et utilisé TLBIMP pour générer un assemblage DLL approprié prêt à être ajouté dans la section « Références ... » dans mon projet C #.
Assurez-vous d'utiliser les outils avec la version correcte pour votre cadre de projet. par exemple, si votre cadre de projet est basé 3,5, en utilisant tlbimp du 4.0 ensemble d'outils ne fonctionne pas.