您可以使用靜態關鍵字。但它只適用於新的Delphi版本。
像這樣:
type
TMyThread = class
private
// ...
class function ThreadProc(Param: Pointer): DWord; stdcall; static; // <- WinAPI call back
function Execute: DWord; // <- actual callback
public
constructor Create;
// ...
end;
{ TMyThread }
constructor TMyThread.Create;
begin
// ...
FHandle := CreateThread(nil, 0, @ThreadProc, Self, 0, FID);
end;
class function TMyThread.ThreadProc(Param: Pointer): DWord;
begin
Result := TMyThread(Param).Execute;
end;
function TMyThread.Execute: DWord;
begin
MessageBox(0, 'Hello from thread', 'Information', MB_OK or MB_ICONINFORMATION);
Result := 0;
end;
這裏:ThreadProc的是WinAPI的回調例程。它需要有某種形式的自定義論證,你可以通過自我。它不能訪問實例成員。這就是爲什麼它只是真正的回調(Execute)的包裝,它是類的一部分,可以訪問它的字段和方法。
我不知道這種方法是否能在未來的(遠?)64位delphi版本中使用(Proc調用在64中有很大不同)。我真的懷疑它。但現在沒有辦法說。 – ChristianWimmer 2010-06-06 11:21:05