Hallo,
ich habe folgendes Problem, gleich Vorweg, mit Threadprogrammierung kenne ich mich nicht so gut aus, vielleicht kann mir jemand weiterhelfen.
In meinem Delphi7-Programm verwende ich eine
DLL für Bildverarbeitung, welche über ein
Handle gestartet wird und auch wieder beendet wird.
Es gibt nun 2 Buttons auf der Programmoberfläche mit denen man die Bildverarbeitung startet bzw beendet --> funktioniert einwandfrei
starten:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
hwnd := Pointer(Form1.Handle);
withandle := witDLLInit4(hwnd, 0, nil, nil, 0, nil);
end;
beenden:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
WitDllExit(withandle);
end;
Desweiteren soll dies auch über
TCP/
IP-Befehle möglich sein, hierfür verwende ich die
Indy-komponenten:
Delphi-Quellcode:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
Command : String;
temp: String;
begin
Command := AThread.Connection.ReadLn;
Command := uppercase(Command);
if (Command = 'LOADDLL') then [b]//starten[/b]
begin
hwnd := Pointer(Form1.Handle);
withandle := witDLLInit4(hwnd, 0, nil, nil, 0, nil);
temp:='DLL_LOADED' + chr(10);
AThread.Connection.Write(temp);
end
else if (Command = 'UNLOADDLL') then [b]//beenden[/b]
begin
WitDllExit(withandle);
temp:='DLL_UNLOADED' + chr(10);
AThread.Connection.Write(temp);
end
else
begin
temp:='NOK:UNKNOWN_COMMAND' + chr(10);
AThread.Connection.Write(temp);
end;
end;
--> Auch das funktioniert für sich einwandfrei
D.h. Starten über Button, beenden über Button geht
Starten über TCP/IP, beenden über TCP/IP geht
Jetzt das Problem: Starte ich die DLL über den Button und will Sie über TCP/IP beenden hängt sich das Programm auf, genauso anders herum....
Bin mir ziemlich sicher dass die Pointer nur in ihrem eigenen Thread gültig sind und es deshalb Probleme gibt, finde aber keine verlässliche einfache Lösung dies zu umgehen.
Vielen Dank für Eure Hilfe,
Jens