Twinsetter
Erfahrenes Mitglied
Ich habe Probleme mit dem Aufruf von DLL-Funktionen in einem Thread.
Ich muß den Aufruf der DLL-Funktion in einen Thread (ich wüßte momentan nichts besseres) verlagern, weil von der DLL ein Dialog erzeugt wird, den ich im Hauptprogramm auswerten (Auslesen der Dialogfelder) möchte. Ich habe keinen anderweitigen Zugriff auf die Daten des Dialogs.
Das funktioniert alles auch soweit wie gewünscht, wenn ich jedoch den Thread vom Hauptprogramm aus mit Terminate beenden will, gibt's eine Exception. Lasse ich den Thread weiterlaufen (z.B. durch eine Endlosschleife im Execute-Block) funktioniert alles und der Thread wird mit Beenden des Hauptprogrammes ordentlich beendet.
Hier der Quelltext der Threadproceduren:
Habe schon alles probiert, komme aber irgendwie nicht weiter?
Ich muß den Aufruf der DLL-Funktion in einen Thread (ich wüßte momentan nichts besseres) verlagern, weil von der DLL ein Dialog erzeugt wird, den ich im Hauptprogramm auswerten (Auslesen der Dialogfelder) möchte. Ich habe keinen anderweitigen Zugriff auf die Daten des Dialogs.
Das funktioniert alles auch soweit wie gewünscht, wenn ich jedoch den Thread vom Hauptprogramm aus mit Terminate beenden will, gibt's eine Exception. Lasse ich den Thread weiterlaufen (z.B. durch eine Endlosschleife im Execute-Block) funktioniert alles und der Thread wird mit Beenden des Hauptprogrammes ordentlich beendet.
Hier der Quelltext der Threadproceduren:
Code:
var
ValidateApplication : function(App:PChar; Option:PChar):word;stdcall;
procedure TNewLic.Execute;
begin
DLL:=LoadLibrary(PChar(DLLName));
try
if DLL<>0 then begin
@ValidateApplication:=GetProcAddress(DLL,'ValidateApplication');
if @ValidateApplication<>nil then begin
//löschen der Lizenzinfo
ValidateApplication(PChar(ID),PChar('makeInvalid'));
//Lizenzdialog anzeigen
ValidateApplication(PChar(ID),PChar(SubID));
end;
FreeLibrary(DLL);
end;
except
end;
repeat
//Synchonisieren mit Hauptthread
Synchronize(StopFunc);
until Terminated;
end;
procedure TNewLic.StopFunc;
begin
//Procedur ruft NewLic.Terminate auf
Form1.sync;
end;
Habe schon alles probiert, komme aber irgendwie nicht weiter?