2009-06-26 6 views
3

J'essaie de tester une bibliothèque qui fournit un exemple VC++; Cependant, j'utilise gcc/g ++ pour tous mes projets.Directive VC++ #import pour GCC/G ++

Eh bien, la façon dont l'exemple VC accède à la bibliothèque est qu'il utilise la #import directive, en passant l'emplacement de la DLL de bibliothèque, puis il fait un en utilisant l'espace de noms LIBRARYNAME, et il est en mesure de créer un type indéfini (je suppose qu'il est défini dans la DLL) et en crée une nouvelle instance avec __uuidof. A partir de là, pour appeler l'une des fonctions de la bibliothèque, l'exemple fait juste createdObj-> foo() et c'est tout. # L'importation de # ... g ++ est différente de l'importation de VC++ (voir here), donc cet exemple ne fonctionnera pas pour moi.

Y a-t-il un moyen de le convertir en compilateur sous g ++, ou suis-je SOL jusqu'à ce que le développeur de bibliothèque me fournisse une bibliothèque statique que je peux essayer?

Répondre

2

Si vous utilisez cygwin, alors cette page: http://www.cygwin.com/cygwin-ug-net/dll.html vous fournira toute l'aide dont vous avez besoin. Si vous utilisez mingw, vous pouvez accomplir la même chose, mais vous n'aurez probablement pas grep et sed, vous devrez donc utiliser une autre méthode de filtrage pour obtenir votre fichier .def.

+0

Merci; Malheureusement, cela ne fonctionne pas, car la commande qu'ils donnent sur ce site web ne renvoie "aucun symbole" pour moi. Je me demande alors comment VC++ est capable d'en extraire les symboles? Peut-être est-ce parce que les fonctions de la bibliothèque sont des fonctions stdcall, pas des fonctions cdecl? – beepboopbopbop

+0

+1 thx pour le lien ... –

1

Si vous utilisiez #import dans VC++, cela signifie que la DLL n'est pas une DLL régulière, mais une DLL COM.

Étant donné que gcc ne dispose pas du support COM, il vous suffit d'attendre que l'auteur de la bibliothèque écrive une version non-COM.

+0

COM est bien documenté. Vous pouvez l'utiliser en utilisant rien de plus qu'un compilateur C – jalf

+1

Ok, je ne dis pas que c'est impossible, mais alors vous devrez créer les interfaces à la main pour correspondre à la mise en page VC++ vtable. Il serait préférable de trouver une bibliothèque non-COM ou de passer à un VC++ Express pour ce projet. –

2

Peut-être que cela aurait pu vous aider à utiliser OLEViewer et "Afficher les informations de type" pour extraire les bases de l'IDL. Ou peut-être pourriez-vous simplement utiliser les fichiers .tlh et .tli générés par VC++ et les importer dans votre projet G ++.

Je suppose que cette réponse est trop tard, mais en ce moment je rencontre des problèmes similaires, donc je viens de rentrer dans ce fil. J'espère que vous avez trouvé la solution à temps.

Cordialement.