Also entweder selber übersetzen, wie Günther auch schon vorgeschlagen hat.
Ist ja eigentlich recht überschaubar.
Hier die Arbeit von fünf Minuten:
Delphi-Quellcode:
unit ThreadPool;
interface
uses
Winapi.Windows;
type
TP_POOL =
record
end;
PTP_POOL = ^TP_POOL;
function CreateThreadpool(reserved : Pointer =
nil) : PTP_POOL;
stdcall;
function SetThreadpoolThreadMinimum(ptpp: PTP_POOL; cthrdMin : DWORD) : BOOL;
stdcall;
procedure SetThreadpoolThreadMaximum(ptpp: PTP_POOL; cthrdMost : DWORD);
stdcall;
procedure CloseThreadpool(ptpp : PTP_POOL);
stdcall;
function CreateThreadpool;
external kernel32
name '
CreateThreadpool';
function SetThreadpoolThreadMinimum;
external kernel32
name '
SetThreadpoolThreadMinimum';
procedure SetThreadpoolThreadMaximum;
external kernel32
name '
SetThreadpoolThreadMaximum';
procedure CloseThreadpool;
external kernel32
name '
CloseThreadpool';
implementation
end.
Delphi-Quellcode:
implementation
uses
ThreadPool;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
var
MyThreadPool : PTP_POOL;
begin
MyThreadPool := CreateThreadpool;
if SetThreadpoolThreadMinimum(MyThreadPool, 1) then
begin
SetThreadpoolThreadMaximum(MyThreadPool, 100);
end;
CloseThreadpool(MyThreadPool);
end;
Auch ein möglicherweise effektiverer Weg wäre das erstellen einer C++-
DLL, die die Funktionalität mithilfe eines
COM-Interfaces für Delphi bereitstellt.
Der richtige Code kann direkt in C++ geschrieben werden, ohne jeden Mist an struct und Pointer (oder Pointer auf Pointer) zu übersetzen.
Das Interface-Objekt selber hätte dann nur die allernötigsten Methoden zum Verwalten des ThreadPools.
Delphi-Quellcode:
IThreadPool = interface(IUnknown)
procedure SetMinimum(NumberOfThreads : DWORD); stdcall;
procedure SetMaximum(NumberOfThreads : DWORD); stdcall;
end;