Hab's mit Synchronize versucht, da kommt wieder der Zugriff-Verweigert Fehler:
Delphi-Quellcode:
MyMainThread : TMyMainThread;
procedure ShowSettings(
Handle: Integer);
begin
if Assigned(MyMainThread)
then
MyMainThread.Synchronize(MyMainThread, MyMainThread.ShowDLLForm);
// PostThreadMessage(MyMainThread.ThreadID, WM_SHOWFORM, Handle, 0);
end;
procedure TMyMainThread.ShowDLLForm;
begin
if Assigned(frMain)
then
frMain.ShowModal;
end;
EDIT:
Auch habe ich noch eine anderes Problem:
Ich starte ja nun einen Thread, dieser macht mir die frMain Form.
Nun arbeite ich mit einem HID-Deivce.
Wenn nun das Gerät abgesteckt wird bleibt mir die
DLL bei Checkin stehen:
Delphi-Quellcode:
// method CheckIn hands a checked out HidDevice back in
procedure TJvHidDeviceController.CheckIn(
var HidDev: TJvHidDevice);
begin
if HidDev <>
nil then
begin
HidDev.StopThread;
//<----- hier bleibt es stehen
HidDev.CloseFile;
HidDev.CloseFileEx(omhRead);
HidDev.CloseFileEx(omhWrite);
if HidDev.IsPluggedIn
then
begin
HidDev.FIsCheckedOut := False;
Dec(FNumCheckedOutDevices);
Inc(FNumCheckedInDevices);
end
else
HidDev.Free;
HidDev :=
nil;
end;
end;
Delphi-Quellcode:
procedure TJvHidDevice.StopThread;
begin
if Assigned(FDataThread) then
begin
FDataThread.Terminate;
FDataThread.WaitFor; <<----schätze also hier das es stehen bleibt
FDataThread.Free;
FDataThread := nil;
end;
end;
Wenn ich die EXE beende, die die
DLL geladen hatte läuft es erst weiter.
Wiso wird das jetzt blockiert?