为什么此程序不是TProc?

Dav*_*d U 3 delphi

我遇到以下情况:

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;
Run Code Online (Sandbox Code Playgroud)

编译器说我不能使用TTask运行MyProcedure。尝试将MyProcedure强制转换为TProc是错误的。我的问题是1)什么是MyProcedure?2)我将如何发现MyProcedure的类型?

谢谢

J..*_*... 5

TProc不使用stdcall调用约定。它被声明为使用默认register调用约定的匿名方法类型:

 TProc = reference to procedure;
Run Code Online (Sandbox Code Playgroud)

 TMyProcedure = procedure of object; stdcall;
Run Code Online (Sandbox Code Playgroud)

匿名方法与声明标准Delphi register约定以外的调用约定的方法不兼容。要么不使用stdcall,要么插入包装器方法或本地匿名方法,即:

procedure TDerivedObject.SomeOtherProcedure;
begin
  TTask.Run(procedure begin MyProcedure; end); 
end;
Run Code Online (Sandbox Code Playgroud)