您可以使用静态关键字。但它只适用于新的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