我有以下类似的情况:
interface
type
IMyInterface = interface
[GUID]
procedure MyProcedure; stdcall;
end;
TMyOBject = class(TInterfacedObject, IMyInterface)
procedure MyProcedure; virtual; stdcall; abstract;
end;
TDerivedObject = class(TMyOBject)
procedure MyProcedure; override; stdcall;
procedure SomeOtherProcedure;
end;
implementation
uses
System.Threading;
procedure TDerivedObject.MyProcedure;
begin
//DoStuff;
end;
procedure TDerivedObject.SomeOtherProcedure;
begin
TTask.Run(MyProcedure); //Error: Run can't be called with this parameter
end;
编译器说我不能使用TTask来运行MyProcedure。将MyProcedure强制转换为TProc是错误的。我的问题是:1)MyProcedure是什么类型?2)我该如何发现MyProcedure的类型?
谢谢
对象过程
与匿名的过程引用
类型是赋值兼容的(通过编译器魔法),只要没有调用约定覆盖。如果您对此有更多细节(和一些注意事项)感兴趣,请参见此问题。 - J...register
和stdcall
约定之间没有区别 - 我猜这是为将要插入外部API的某些内容而编写的样板代码,其中将有参数和返回值?如果不是,显然的解决方案就是不要用stdcall
修饰你的类方法。 - J...