Also ganz ehrlich, das kann doch nicht sein?! Irgendwas läuft da grundlegend falsch.
Ich dachte, ok paralell geht nicht, steige ich - mit mehraufwand - auf normale threads um.
Es stellt sich raus, ...das geht genauso wenig.
Nehmen wir folgende minimalklasse
Delphi-Quellcode:
type
tmythread = class(Tthread)
procedure Execute; override;
end;
Procedure tmythread.Execute;
Begin
While Not Terminated Do
Begin
Sleep(1000);
Writeln(Timetostr(Now));
End;
End;
und packen sie in eine standalone exe. ...
Delphi-Quellcode:
with tmythread.Create(true) do
begin
start;
waitfor;
free;
end; //unbeachtet der endlosschleife hier
gibt das ganz normal jede sekunde eine zeit aus. Soweit so gut,
packe ich DENSELBEN code in eine dynamisch geladene
dll
..NIX
Der Thread (zum testen innerhalb der
dll "gestartet") gibt nix aus. Es zeigt sich dass, beim Aufruf der Methode "start"
a) irgendein Tobject.create aufgerufen wird (ok kann ja im hintergrund sein)
b) direkt dabei eine
access violation auftritt bei
Delphi-Quellcode:
function _ClassCreate(InstanceOrVMT: Pointer; Alloc: ShortInt): Pointer;
//..
CALL DWORD PTR [EAX] + VMTOFFSET TObject.NewInstance
//..
end;
Im Call-Stack listet er dann noch system.classes.objecttexttoresources() auf, das ist dann aber so tief in den internals der
rtl. Ich dachte nicht dass mich so ein code überhaupt tangiert..?
Das "onidle" wie ganz zu beginn mal angemerkt, wurde auch hier exportiert. Aber es kann doch nicht sein,ddass ich *keinen* einzigen Thread in der
dll laufen lassen kann (außer app main thread)?
Ich bin echt ratlos, liebe leute.
Danke schon mal für euer feedback.