TThread und COM - "CoInitialize wurde nicht aufgerufen", obwohl CoInitialize im Konstruktor aufgerufen wird

8

Ich versuche COM-Schnittstelle innerhalb eines Threads zu verwenden. Nach dem, was ich gelesen habe, muss ich CoInitialize/CoUninitialize in jedem Thread aufrufen.

Während dies funktioniert:

%Vor%

wenn ich die Aufrufe in Konstruktor und Destruktor verschiebe:

%Vor%

Ich bekomme EOleException: CoInitialize wurde nicht Ausnahme aufgerufen und ich habe keine Ahnung warum.

    
forsajt 15.08.2016, 20:18
quelle

1 Antwort

18

CoInitialize initialisiert COM für den ausführenden Thread. Der Konstruktor einer Instanz TThread wird im Thread ausgeführt, der die Instanz TThread erstellt. Der Code in der Methode Execute wird im neuen Thread ausgeführt.

Dies bedeutet, dass Sie, wenn Sie Ihren TThreadedJob -Thread für die Initialisierung von COM benötigen, CoInitialize in der Methode Execute aufrufen müssen. Oder eine Methode, die von Execute aufgerufen wird. Folgendes ist richtig:

%Vor%     
David Heffernan 15.08.2016, 20:23
quelle