Ma société a créé plusieurs objets COM et les utilisait avec bonheur depuis .NET. Mais maintenant, notre client veut passer à Java. Je pensais qu'il serait intéressant d'utiliser JACOB ou j-interop (je ne sais pas lequel d'entre eux) pour certaines tâches, mais le code résultant est assez ingérable. Je veux donc écrire un outil capable de lire la TypeLib de la bibliothèque COM, puis générer des classes wrapper Java pour cacher tout ce code ingérable. Je suis un novice dans le monde COM, donc je ne sais pas comment obtenir les informations sur les interfaces, les méthodes et les paramètres qui décrivent un objet COM. J'ai lu quelque chose appelé TypeLib, mais je ne sais pas comment le lire. Comment puis-je obtenir des informations?Comment lire COM TypeLib avec C# ou C++?
Répondre
L'API officielle est disponible ici: Type Description Interfaces.
Vous pouvez l'utiliser directement depuis C++ mais je vous suggère d'utiliser .NET (C# dans mon exemple) avec un outil supplémentaire que Microsoft a écrit il y a longtemps (le mien date de 1997), nommé TLBINF32.DLL. C'est aussi un objet COM mais est compatible avec Automation (VBScript, Javascript, VB/VBA) et .NET.
Vous pouvez trouver le googling TLBINF32.DLL pour cela (ce lien semble fonctionner aujourd'hui: tlbinf32.dll download, assurez-vous que vous obtenez le fichier .ZIP, pas ce qu'ils appellent le "fixateur" ...). Notez qu'il s'agit d'une DLL 32 bits, donc votre programme doit être compilé en 32 bits pour pouvoir l'utiliser. Je ne connais aucune version 64 bits.
L'utilisation de cette bibliothèque est expliquée en détail dans l'article du magazine MSDN de décembre 2000: Inspect COM Components Using the TypeLib Information Object Library. C'est orienté VB (pas .NET), mais il est assez facile à traduire en termes .NET.
Voici une application console exemple en C# qui déverse simplement toutes les informations de type d'un type lib (ici Mshtml.tlb):
class Program
{
static void Main(string[] args)
{
TypeLibInfo tli = new TypeLibInfo();
tli.ContainingFile = @"c:\windows\system32\mshtml.tlb";
foreach (TypeInfo ti in tli.TypeInfos)
{
Console.WriteLine(ti.Name);
// etc...
}
}
}
- 1. Quel est "meilleur": COM DLL ou DLL standard avec un Typelib?
- 2. Comment trouvez-vous les interfaces d'un COM sans typelib?
- 3. Comment faire C# COM DLL équivalent à ATL COM C++
- 4. C# - Générer typelib - spécifie le nom de la bibliothèque?
- 5. Comment utiliser COM en C#
- 6. Problèmes avec l'objet COM C#
- 7. API COM VirtualBox à partir de C#
- 8. Comment consommer un serveur local COM + à partir de C#?
- 9. com interop: comment consommer C# à partir d'Excel ou Access
- 10. Bibliothèque d'interopérabilité C# COM
- 11. C# Com serveur OLE
- 12. Lire Pdf avec C
- 13. Comment utiliser union de propriété C++ en C# via wrapper Visual Studio COM (ou d'autres moyens)
- 14. Lire les ports COM en utilisant le filetage dans C#
- 15. Événements COM + avec C# et .NET
- 16. Attraper les erreurs COM avec C#
- 17. COM Exceptions en C#
- 18. C# Registre COM interop
- 19. Objets C# COM avec erreur VB6/asp
- 20. Réflexion en C# ne fonctionne pas avec COM (et C++)
- 21. Marquage des BSTR de C++ vers C# avec COM interop
- 22. C++ COM: Erreurs courantes
- 23. C# Classe COM - DISP_E_UNKNOWNNAME
- 24. Comment lire le port COM d'un périphérique?
- 25. Exposition de C# via COM pour le client C++
- 26. lire xml avec linq (C#)
- 27. Direct3D COM interop en C#
- 28. C# ajouter ou lire à partir d'un fichier C# exe
- 29. Com Erreur d'initialisation 0x80040154 Chargement C# Objet COM avec C++ Programme
- 30. Traduction d'objets COM (ou éventuellement XMLHTTP) dans Coldfusion en C#