1

Bonjour,

Je suis en train de porter une petite appli qui est développée de façon native en C++ avec l'api Win32 sous QT.
Or dans ma fenêtre il y a des ActiveX :-(

J'ai trouvé comment les intégrer graphiquement avec QtDesigner, mais j'ai un soucis :
J'ai un objet COM qui permet se connecter avec une webwam un peu complexe, et c'est seulement un fois la connexion établie que les ActiveX affichent des infos.

Sauf que je comprends pas comment utiliser les objets COM, par exemple, que fait CoCreateInstance, et que fait QueryInterface? Dans quel cas on doit les utiliser?
Est-ce que en intégrant mon objet COM à Qt via de QAxObject, je dois utiliser CoCreateInstance? (il me semble que c'est Qt qui le gère en arrière plan)

Quand j'utilise un dynamicCall sur mon QAxObject, j'obtiens : QAxBase::dynamicCallHelper: Object does not support automation
Pourtant je suis sur que les constructeur a bien réussi... D'où la question : tous les objets COM sont ils fait pour être appelés dynamiquement?

Niveau ressource, j'ai la dll, et un fichier TLH. J'ai aussi un fichier stdafx.h qui fait tout planter quand je l'inclus à la manière du projet win32 (redéfinitions de symboles dans mon fichier TLH, mais je comprends pas pourquoi).
Enfin, est-ce que j'ai besoin d'inclure ATL pour faire fonctionner tout ça, ou bien ActiveQt gère ça lui même?
C'est surtout queryInterface que je n'arrive pas à me faire fonctionner, et qui me met toujours un pointeur null dans ma "classe Interface"

Je n'ai pas le code ici, mais ce que j'ai fait jusque là ressemble à :
#include <QAxObject>
#include "fichier.tlh"

QAxObject *tetClient;
ITetClient *interface;
tetClient = new QAxObject("TetClient Object");
HRESULT hr = tetClient.queryInterface( ?????? , &interface);

A la place des points d'interrogation, j'ai utilisé IID_TetClient, QUuid(Qstring(.....)), CSID_Tet...
Et systématiquement, interface est un pointeur null -_-

2

Hélas je ne connais pas QT. Regarde si la bibliothèque expose des pointeurs COM intelligents (je soupçonne QAxObject d'en être un, mais j'ai des doutes).
Sinon, sache que normalement, le .tlh lui-même déclare des classes de pointeurs COM intelligents (Généralement sous la forme IXxxxPtr).
Ces classes exposent une méthode CreateInstance(), qui crée un nouvel objet et fait pointer le pointeur intelligent dessus.

Pour ton autre question, non ils ne sont pas tous faits pour être appelés dynamiquement: Seuls les objets supportant l'interface IDispatch peuvent l'être.
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

3

(j'avoue que je ne comprends pas trop... si ton application utilise des ActiveX, elle ne marche de toute façon que sous Windows, donc pourquoi se casser la tête avec Qt plutôt que d'utiliser des bibliothèques faites exprès pour Windows ?)
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

4

Parce que je veux tester de nouvelles idées de GUI, et que je veux le faire en C++.
Bon, j'ai réussi à comprendre comment marche QAxObject, mais ça n'a pas résolu mon problème.
Il faut lancer dumpcpp pour qu'il génère un header et un fichier cpp correspondant à l'objet COM compatible avec QT, et le rajouter dans le .pro à TYPELIBS.
Cependant, mon objet COM utilise des structures, qui sont déclarées dans le .h généré, mais pas définies...

5

Et pour Windows tu as MFC, qui est supporté officiellement par Microsoft (enfin, je crois que ça l'est encore ?), avec un « très bon » (enfin je pense, c'est du MFC je touche pas à ça moi hein embarrassed) suport de COM et de ses ancêtres et dérivés.
Cependant, COM (et surtout ActiveX grin), c'est toujours bien casse couilles à faire fonctionner, quel que soit le langage et les API que tu veux utiliser. (Y'a qu'en VB5/VB6 où c'est simple vu que le langage est plus ou moins architecturé directement autour de COM)
Bon courage cheeky
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes