Forum: PC-Programmierung COM/CoInitializeEx


von cppbert (Gast)


Lesenswert?

Ich versuche gerade ein Problem zu lösen und zwar gibt es zwei 
Komponenten in der Software an der ich arbeiten(muss) die beide mit 
CoInitializeEx unterschiedliche ThreadModels setzen - ergibt komische 
Effekte und ist definitiv nicht richtig

Was ist jetzt aber ein einfacher/richtiger Fix - die beiden Komponenten 
fragen nur ein paar Daten ab und liefern ein paar Strings zurueck - also 
relativ klein

kann ich die beiden Komponenten jeweils in einen eigenen Thread bannen 
und dort die CoInitializes Aufrufen und das ganze da durch entkoppeln 
oder was wäre die richtige Lösung

Danke für eure Hilfe/Tips

von cppbert (Gast)


Lesenswert?

cppbert schrieb:
> Ich versuche gerade ein Problem zu lösen und zwar gibt es zwei
> Komponenten in der Software an der ich arbeiten(muss) die beide mit
> CoInitializeEx unterschiedliche ThreadModels setzen - ergibt komische
> Effekte und ist definitiv nicht richtig
>
> Was ist jetzt aber ein einfacher/richtiger Fix - die beiden Komponenten
> fragen nur ein paar Daten ab und liefern ein paar Strings zurueck - also
> relativ klein
>
> kann ich die beiden Komponenten jeweils in einen eigenen Thread bannen
> und dort die CoInitializes Aufrufen und das ganze da durch entkoppeln
> oder was wäre die richtige Lösung
>
> Danke für eure Hilfe/Tips

von einer der Komponenten haben ich den Source, von der anderen nur eine 
Lib

von René K. (king)


Lesenswert?

Eine Komponente wird in einem Apartment instanziiert, zu dieser Zeit 
muss es bereits initialisiert sein. Instanziierst Du die Komponente in 
einem "falschen" Apartment, greift die COM Runtime auch ohne Dein Zutun 
ein. Wichtig ist nur, dass Du im STA eine Nachrichten-Pumpe laufen hast, 
dann funktioniert das von selbst.

Ansonsten gilt: Ein Thread wohnt zu einer Zeit genau in einem Apartment. 
Benötigst Du mehrere Apartments gleichzeitig, musst Du mehrere Threads 
erstellen. Und immer schön daran denken, niemals Schnittstellenzeiger 
direkt zwischen Threads zu tauschen!

von cppbert (Gast)


Lesenswert?

René K. schrieb:
> niemals Schnittstellenzeiger
> direkt zwischen Threads zu tauschen!

Danke für den Hinweis - gerade so ein Stelle im Code entdeckt

Ich werde die beiden Dinger komplett in eigene Threads auslagern und nur 
die Daten zurueck liefern - dann ist erst mal clean

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.