Du solltest lesen was ich geschrieben hab ...
Du startest einen Thread, der die
DLL Funktion aufruft. Natürlich hast Du von dem Thread das
Handle - wird ja von
CreateThread zurückgeliefert
. Das Thread
Handle kannst Du dann für
WaitForSingleObject benutzen. Das ganze würde in etwa so aussehen:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
Windows;
type
TParameters = record
Parameter1 : dword;
Parameter2 : dword;
Parameter3 : dword;
Result : dword;
end;
PParameters = ^TParameters;
function SometimesDoesntReturn(parameter1, parameter2, parameter3 : dword) : dword;
begin
result := 0;
case random(2) of
0 : sleep(INFINITE);
1 : result := Parameter1 + Parameter2 + Parameter3;
end;
end;
function CallWrapper(Parameters : PParameters) : dword; stdcall;
begin
Parameters^.Result := SometimesDoesntReturn(Parameters^.Parameter1, Parameters^.Parameter2, Parameters^.Parameter3);
end;
var
Parameters : TParameters;
ThreadID, ThreadHandle : dword;
i : integer;
begin
Randomize;
for i := 0 to 19 do
begin
Parameters.Parameter1 := random(100000);
Parameters.Parameter2 := random(100000);
Parameters.Parameter3 := random(100000);
ThreadHandle := CreateThread(nil, 0, @CallWrapper, @Parameters, 0, ThreadID);
case WaitForSingleObject(ThreadHandle, 1000) of
WAIT_OBJECT_0 : writeln('Aufruf erfolgreich -> Result: ', Parameters.Result);
WAIT_TIMEOUT : writeln('Aufruf haengt -> TerminateThread: ', TerminateThread(ThreadHandle, 0));
end;
CloseHandle(ThreadHandle);
end;
readln;
end.