CCOmObject, AtlAdvise und QT

Alles rund um die Programmierung mit Qt
Antworten
sascha
Beiträge: 37
Registriert: 12. Januar 2006 11:01

CCOmObject, AtlAdvise und QT

Beitrag von sascha »

Hallo!
Ich bin relativ neu in der Materie (sowohl C++ als auch QT) und verwende hier QT4.1
Nun mein Problem:

Ich muss auf eine API Zugreifen, die mittels CComObject und AtlAdvise arbeitet, um so auf Events zu hören.
Nun habe ich einfach eine EventPoint Klasse geschrieben, die die benötigten Funktionen implemntiert.
Dort habe ich nun versucht, über eine globale Variable (in der das MainWindow steckt), auf dessen StatusBar zuzugreifen, um Nachrichten anzuzeigen.
Nur leider kommt dann der folgende Fehler:

Code: Alles auswählen

"Cannot send events to objects owned by a different thread"
Was kann ich da machen? Hat da jemand Erfahrungen mit?
uhu01
Beiträge: 150
Registriert: 10. Juli 2005 20:46

Beitrag von uhu01 »

Hy!

Ja. Du kannst keinen direkt Slot aufrufen, der zu einer GUI Klasse gehört, die in einem anderen Thread benutzt wird. Du musst beim spezifizieren der Verbindung, bei connect als weiteren parameter Qt::QueuedConnection angeben. Damit wird der Slot vom GUI Thread selbst im nächsten durchlauf der Main-Loop aufgerufen.

mfg
uhu01
sascha
Beiträge: 37
Registriert: 12. Januar 2006 11:01

Beitrag von sascha »

Moment, das verstehe ich jetzt nicht :-(

Also ich erstelle ja das CComObject:

Code: Alles auswählen

CComObject<CMnnikCallback> *pDriver;
CComObject<CMnnikCallback>::CreateInstance (&pDriver);
und "verbinde es mit dem sdk":

Code: Alles auswählen

AtlAdvise (m_NIK, pDriver, IID_IMNNIKEvents, &m_dwAdvise);
Nun kommen in pDriver, welches ja meinen EventPoint darstellt, die Meldungen vom SDK an.
Dort möchte ich nun aber die Meldungen, die ankommen, an das Fenster schicken, in dem das CComObjekt erstellt worden ist.....
Wie kann ich das nun machen?
Einfach CMnnikCallback ebenfalls von Thread erben lassen und dann mittels connect SLOT und Signal verbinden?
Antworten