Seite 1 von 1

Events einer ActiveX Komponente abfangen

Verfasst: 14. September 2010 09:42
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 ...

Verfasst: 15. September 2010 11:55
von AuE
Gibt dein connect true zurück??

Verfasst: 15. September 2010 18:43
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.

Verfasst: 16. September 2010 08:26
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???

Verfasst: 16. September 2010 13:31
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 ...