2010-09-23 2 views
1

Je sais que cette question peut sembler étrange en raison de nouvelles alternatives existantes, mais croyez-moi, il y a une raison.Utiliser mscomm ActiveX avec Qt

Je voudrais utiliser le contrôle X actif mscomm pour communiquer via le port série avec Qt. Oui, je sais qu'il y a QextSerialPort, QSerialDevice et beaucoup d'exemples sur la façon d'écrire du code de communication série. Mais en raison d'un problème que j'ai, je voudrais tester mscomm.

Je sais que Qt a un système pour utiliser les contrôles ActiveX, mais je ne trouve aucune information claire sur la façon de les utiliser (je ne comprends pas le doc officiel qt à ce sujet).

Visual C++ 6 a un mscomm.h et mscomm.cpp qui, je pense, implémente l'interface x active, mais il y a beaucoup de macros et de dépendances microsoft mfc partout.

Une idée?

+0

Vous devez poster la réponse au problème comme une réponse au lieu de le modifier dans votre question. – murgatroid99

Répondre

1

Ok, il semble que je l'ai réalisé.

Vous devez utiliser QAxObject pour renvoyer l'activeX que vous voulez exécuter. Pour ce faire, vous devez connaître le CLSID, dans mon cas:

QAxObject* activex = new QAxObject("648A5600-2C6E-101B-82B6-000000000014"); 

Ensuite, vous ne devez utiliser dynamicCall (QString, QVariant) pour appeler l'un des membres du contrôle ActiveX a. Pour générer une liste de toutes les méthodes disponibles, utilisez:

QString doc = activex->generateDocumentation(); 

C'est merveilleux, vous obtenez un document html avec tous les membres disponibles, des propriétés et des exemples qui expliquent comment les utiliser (Qt Documentation vous dire pouvez utiliser dumpdoc pour générer les mêmes informations)

Voici un exemple sur la façon d'ouvrir un port (numéro de port 4):

QAxObject* activex = new QAxObject("648A5600-2C6E-101B-82B6-000000000014"); 
    activex->dynamicCall("SetCommPort(int)", 4); 
    activex->dynamicCall("SetPortOpen(bool)", true);