Einzelnen Beitrag anzeigen

Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: COM-Objekte (TOleServer) in Thread-Kontext benutzten

  Alt 8. Sep 2009, 08:36
Hallo Apollonius,

zunächst mal danke für Deine Antwort. Aber ich muss gestehen, ich stehe mit COM-Servern noch ziemlich am Anfang bzw. verwende ich die Dinger einfach nur ohne mir all zu viel Gedanken darüber zu machen.
D.h. Dein Stichwort MSDN-Library durchsuchenSingle-Threaded Apartments geht wahrscheinlich schon in die Richtung. Der Hersteller des COM-Servers sagt, dass intern ein Worker-Thread arbeitet der die Events auslöst, dass neue Daten da wären.
In der entsprechenden Klasse die von TOleServer abgeleitet ist, sehe ich nur folgendes bezüglich des Events:
Delphi-Quellcode:
procedure TMeineKlasse.InvokeEvent(DispID: TDispID; var Params: TVariantArray);
begin
  case DispID of
    -1: Exit; // DISPID_UNKNOWN
    1: if Assigned(FOnDataIn) then
         FOnDataIn(Self, Params[0] {const IDispatch});
    // hier natürlich noch weitere Fälle
  end; {case DispID}
end;
Meine Vermutung war jetzt die, das der COM-Server intern die Nachricht in eine MessageLoop gibt und InvokeEvent darauf reagiert. Denn wenn InvokeEvent im Kontext des Threads laufen würde, hätte ich die Probleme nicht

Ich nutzte das Objekt wie folgt:
Delphi-Quellcode:
MeineKlasse := TMeineKlasse.Create(AOwner);
//...
MeineKlasse.OnDataIn := MeineKlasseDataIn;
//...
Reicht es tatsächlich so ein MSDN-Library durchsuchenCoInitializeEx mit MSDN-Library durchsuchenCOINIT_MULTITHREADED aufzurufen? Nur woher weiß der TOleServer dann an welche MessageLoop er senden soll. Ich will einfach nur sicher gehen, dass der Mainthread für ein Paar Sekunden voll ausgelastet sein kann aber die Daten übertragen Device->Software weiter läuft.

THX, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat