Utilisation du modèle COM (Component Object Model) sur des plates-formes non Microsoft

StackOverflow https://stackoverflow.com/questions/84269

  •  01-07-2019
  •  | 
  •  

Question

Je rencontre régulièrement des situations similaires: J'ai un tas de fichiers .DLL (pas de fichiers IDL) que je dois utiliser et appeler pour pouvoir accéder à certains formats de données étrangers (non ouverts, non documentés).

La plate-forme Visual Studio de Microsoft offre de très bonnes fonctionnalités pour importer de telles DLL COM et les utiliser dans mon projet (directive #import de Visual C ++, ou les sélectionner et les ajouter à l'aide des boîtes de dialogue de Visual Basic .NET) - et c'est la méthode recommandée par les fournisseurs. eux.

Je souhaiterais trouver un moyen d'utiliser ces DLL sur des plates-formes de développement autres que Microsoft. À savoir, utiliser ces classes COM dans un projet C ++ compilé avec MinGW ou Cygwin, ou même le port GCC de Wine sur Linux (compile le ciblage C ++ de Win32 en binaire s'exécutant de manière native sous Linux).

Le succès de mon pilote a été limité, mais ce n'est pas le cas. ' t réussi dans 100% des cas (je ne peux pas utiliser les objets COM renvoyés par certaines méthodes).

Quelqu'un at-il réussi dans des situations similaires?

Était-ce utile?

La solution

Je me suis répondu mais j'ai réussi à trouver la bibliothèque parfaite pour les appels OLE / COM dans des compilateurs non Microsoft: disphelper .

(disponible à partir de sourceforge.net sous une licence BSD facultative).

Cela fonctionne à la fois en C et C ++ (et donc dans tout autre langage avec des liaisons C). Il utilise une syntaxe de chaîne de format semblable à printf / scanf. (Vous transmettez ce que vous voulez tant que vous le spécifiez dans la chaîne de format, contrairement à XYDispDriver qui nécessite que les arguments correspondent exactement à ce qui est spécifié dans la bibliothèque de types).

Je l'ai un peu modifié pour qu'il soit également compilé sous Linux avec WineGCC (pour produire un elf Linux natif à partir de code Win32) et pour gérer "par référence". appelle automatiquement (stock disthelper demande au programmeur de configurer son propre VARIANT).

Ma version et les correctifs corrigés sont disponibles sous forme de fork sur github:

Et voici mes correctifs:

Autres conseils

Le problème avec l'Ole / Com Object Viewer fourni avec Visual Studio et les kits de développement logiciel (SDK) Windows est qu'il produit un .IDL cassé à partir du fichier .DLL, qui ne peut pas être compilé davantage par MIDL en une paire .H / .CPP. .

La réimplémentation de OleViewer par Wine est actuellement instable et se bloque lorsque vous essayez d'utiliser ces bibliothèques.

Je pense que vous devriez pouvoir utiliser l'outil gratuit Ole / Com Object Viewer pour créer les fichiers d'en-tête.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top