inclure la librairie COM dans code::blocks

inclure la librairie COM dans code::blocks - C++ - Programmation

Marsh Posté le 27-06-2008 à 20:59:41    

Salut, je me mets au C++ temporairement pour recompiler une dll foireuse qui me sert avec Java et JNI ...
 
J'ai donc installé code::blocks par simplicité (la version qui inclut mingw) et j'essaie de compiler. Après bien des erreurs et des tentatives, j'arrive à inclure quelques librairies dans le projet et réduire le nombre d'erreurs. Mais maintenant je bute sur les composants de windows que je ne connais pas.
J'ai des erreurs qui me disent que "CLSIDFromString" et d'autres du même genre ("IID_IClassFactory" entre autres) ne sont pas reconnus. D'après google, ça fait partie de COM et ole32.dll (je ne sais pas ce que c'est) et en gros je ne sais pas du tout ce qu'il faut télécharger (un pack de .h j'imagine, j'ai lu quelque part que les librairies COM sont pas tout à fait incluse avec code::blocks) pour que ça fonctionne bien. Donc si vous voulez bien m'aidez, merci d'avance.


---------------
The Rom's, à votre service
Reply

Marsh Posté le 27-06-2008 à 20:59:41   

Reply

Marsh Posté le 27-06-2008 à 21:13:27    

COM est une technologie, pas une librairie. Une librairie COM, pour résumer, expose des interfaces.
Quand tu instancies un objet COM, tu obtiens un pointeur vers l'interface COM commune à tous les objets COM : IUnknown. Tu utilises ensuite ce pointeur pour accéder aux méthodes de la librairie.
ole32.dll est une bibliothéque interne à Windows. L'erreur que tu obtiens est surement due au fait que ton projet n'est pas linké avec le .lib correspondant. Ceci dit, ça serait bien que tu sois un peu plus explicite quant au message d'erreur exact.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 27-06-2008 à 22:16:33    

Ok, merci Harko.
Effectivement, je voyais bien qu'il me manquais quelque chose. En fait, j'ai récupéré jsasio, une interface JNI pour utliser des drivers audio ASIO avec le système audio "javax.sound.sampled" de Java. Quand j'utilise l'option VM -Djava.library.path =  path/to/jsasio.dll j'ai une erreur à l'entrée dans le main (jsasio.jar est bien dans mon classpath) :

java.lang.NoClassDefFoundError: =
Caused by: java.lang.ClassNotFoundException: =
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
Exception in thread "main"

Du coup je me suis dit que cette DLL n'était pas linké avec le driver (constructeur) de ma carte, peut-être plutôt avec celui d'Asio4all de manière générique.
J'ai essayé de recompiler les sources de jsasio.dll (ver 1.2 dispo sur sourceforge) et j'avais l'erreur comme quoi "CLSIDFromString" n'était pas une référence connue. Cette erreur concerne certains fichiers .cpp fournis avec le "sdk" de Steinberg (ceux qui ont inventé les spécifications Asio).
 
J'ai encore réduit les erreurs : j'ai ouvert le projet (.dsw) de Steinberg et j'ai vu quels fichiers sont réellement communs et lesquels ne servent qu'aux exemples fournis. En intégrant que le nécessaire dans mon projet jsasio, tout compile correctement et je suis maintenant bloqué au niveau du linkage ("linking" ?).
De la dernière ligne de compilation à la première ligne d'erreur :

P:projectscodeblocksjsasio_1.2_dlljASIO.h:24: warning: 'activeMixer' defined but not used
Linking dynamic library: binDebugjsasio_1.dll
Creating library file: binDebuglibjsasio_1.a
objDebugasioasio.o: In function `Z8ASIOExitv':
P:/projects/codeblocks/jsasio_1.2_dll/asio/asio.cpp:101: undefined reference to `asioDrivers'

J'ai beacoup de warnings du même genre pendant la compilation mais je suppose que c'est normal pour du JNI ...
Toutes mes erreurs de linkage sont du même type ("undefined reference to ..." ) et concernent :
- la classe AsioDrivers (dépend des fichiers Steinberg) et je suppose qu'il faut que je fasse le lien avec le driver de ma carte pour lequel je n'ai pas de .lib (unique la dll et un .sys, est-ce utilisable ?). Pour l'instant c'est défini comme "extern AsioDrivers *asioDrivers;"
- IID_IUnknown, StringFromCLSID et autres du même genre pour lesquels je ne sais pas où récupérer le(s) .lib.
 
Bref, si tu sais où je peux trouver les bons .lib ou même faire sans pour le driver de ma carte, je te serais très reconnaissant.


---------------
The Rom's, à votre service
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed