Events einer ActiveX Komponente abfangen

Alles rund um die Programmierung mit Qt
Antworten
bobcat
Beiträge: 125
Registriert: 21. April 2010 14:51

Events einer ActiveX Komponente abfangen

Beitrag von bobcat »

Hallo,

ich habe eine ActiveX Komponente in meinem Programm, deren Events ich abfangen und bearbeiten muss. Das angeschlossene Gerät kann ich damit steuern, die Events bekomme ich noch nicht verarbeitet. Ich hab's folgendermassen versucht:

Code: Alles auswählen

#include <QAxObject>

class MyClass : public QObject
{
   Q_OBJECT
   QAxObject* testObjectAx;
   ...
private slots:
   void someEventHandler(short evBits);
};

MyClass::MyClass()
{
   testObjectAx = new QAxObject();
   testObjectAx->setControl("{123-some-id-456}");
   connect( testObjectAx, SIGNAL(someEvent(short evBits)), this, SLOT(someEventHandler(short evBits)));
}

void MyClass::someEventHandler(short evBits)
{
   // handle event
}

Der Event Handler wird allerdings nicht aufgerufen. Hat jemand eine Idee, woran das liegen könnte? Fehlt was prinzipielles im Code?

Bin sehr dankbar für Hinweise, wie ich mit so einer ActiveX Komponente arbeiten muss ...
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Gibt dein connect true zurück??
bobcat
Beiträge: 125
Registriert: 21. April 2010 14:51

Beitrag von bobcat »

AuE hat geschrieben:Gibt dein connect true zurück??
Ja, der connect gibt (mittlerweile ...) true zurück. Ich musste den ActiveX Control nochmal registrieren mit (in der Eingabeaufforderung):

Code: Alles auswählen

Regsvr32 /u /s MyControl.ocx
Damit konnte ich dann nicht nur auf die Steuerfunktionen meines Gerätes zugreifen, sondern auch auf die Events (die wurden dann z.B. im Qt Designer angezeigt).

Ausserdem muss der connect so aussehen:

Code: Alles auswählen

connect( testObjectAx, SIGNAL(someEvent(int)), this, SLOT(someEventHandler(int)));
Leider funktioniert es damit im wesentlichen immer noch nicht ... der Controller, der über ActiveX angesteuert wird, scheint das Event zumindest manchmal auszulösen ... ich hab's etliche Male getestet, der Event Handler wurde einmal aufgerufen.

Entweder hat also die Hardware ein Problem, die ich ansteuere, oder es gibt nach wie vor noch einen Fehler in meiner Einbindung des ActiveX Controls.
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

machst es rein via code oder über den designer?

ist leider scho etwas her bei mir ;) Ich hab damals die Komponente mit Designer reingezogen, UUID eingegeben und dann zeigt das Control obs verbunden ist oder nicht. Klappt das bei dir?

Ach ja - gibt es deine Signale???
bobcat
Beiträge: 125
Registriert: 21. April 2010 14:51

Beitrag von bobcat »

Es läuft jetzt ...

Den Designer hatte ich benutzt, um zu sehen, welchen Code ein Signal - Slot connect mit dem ActiveX Control produziert. Das Signal gibt es, das wird im Designer angezeigt. Ich setze das ganze dann allerdings rein per Code um.

Letztlich lag der Fehler an folgendem Problem:
Auf meinem Gerät musste der Event Handler aktiviert werden, damit das Event gesendet wird. Schickt man den Befehl zum aktivieren des Event Handlers wenn man den Event Handler zuvor schon aktiviert hatte, dann bekommt man zwar eine Fehlermeldung, unsinnigerweise wird dann aber auch kein Event mehr ausgelöst ...
Antworten