Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
842 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  inclure la librairie COM dans code::blocks

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

inclure la librairie COM dans code::blocks

n°1752484
TheRom_S
Posté le 27-06-2008 à 20:59:41  profilanswer
 

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
mood
Publicité
Posté le 27-06-2008 à 20:59:41  profilanswer
 

n°1752487
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 27-06-2008 à 21:13:27  profilanswer
 

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)
n°1752495
TheRom_S
Posté le 27-06-2008 à 22:16:33  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  inclure la librairie COM dans code::blocks

 

Sujets relatifs
qu'est-ce qui cloche dans mon code?VBS /CopyFile permission refusé / code 800A0046
Obtenir le code langue LCID de mon utilisateurcree une relation entre deux table access en code vb6
Nettoyer dans une bd mysql le code html wordMise au point : dépendance sur une librairie systeme, migration de pro
Equivalence code PHP en CGIPub dans un code html
Compiler OpenSLL sous windows en librairie statique ?Utiliser LZMA 7z comme librairie en interne
Plus de sujets relatifs à : inclure la librairie COM dans code::blocks


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR