Autor Beitrag
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Mo 27.01.14 13:27 
Hallo Freunde,

ich habe hier ein ActiveX, das entsetzlich lange zur Initialisierung braucht - aber ich muß es trotzdem zum Programmstart erzeugen. Es landet in einer globalen Variable, da ich es echt von überall her benutzen muß...
Nun habe ich mir gedacht, die Erstellung dieses ActiveX in einen Thread auszulagern. Dieser wird von mir passend gestartet und steht auf FreeOnTerminate=true;. Selbstredend landet das ActiveX in derselben globalen Variable wie zuvor.

Funktioniert auch alles super-wunnebar, bis ich das Programm beende. Dann will ich dieses ActiveX freigeben und es kracht mit der Meldung: Objekt ist nicht mit dem Server verbunden.

Was mache ich denn nun schon wieder falsch ? :-(


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mo 27.01.2014 um 13:16

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 27.01.14 14:13 
Moin!

Puah, komisches Problem... :?

Machst du beim Thread-Start einen CoInitialize bzw. CoInitializeEx und am Ende einen CoUninitialize?

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
OlafSt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Mo 27.01.14 16:59 
Na klar :D Sonst wäre meine Fehlermeldung ja "CoInitialize nicht aufgerufen". Diese Meldung erhalte ich auch prompt, wenn ich den Aufruf im Thread.Execute weglasse.

Weitere Versuche: CoUnitialize im Execute aufgerufen/nicht aufgerufen. FreeOnTerminate nicht auf true gestellt, der Thread blebt also bis zum Programmende am Leben (Einzig MadExcept mosert dann herum, ich hätte da ein Memory Leak :D)

Das Problem verschwindet, wenn ich anstelle CoInitializeEx(nil, COINIT_MULTITHREADED) ein CoInitializeEx(nil, COINIT_APARTMENTTHREADED) aufrufe. Aber das ist in einer Multithread-Umgebung doch inkorrekt ?

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.