Seite 1 von 1

CCOmObject, AtlAdvise und QT

Verfasst: 12. Januar 2006 11:07
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?

Verfasst: 12. Januar 2006 12:31
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

Verfasst: 12. Januar 2006 14:29
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?