gpt4 book ai didi

delphi - 为什么这个过程不是 TProc?

转载 作者:行者123 更新时间:2023-12-03 15:49:27 27 4
gpt4 key购买 nike

我遇到如下情况:

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 的类型?

谢谢

最佳答案

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

 TProc = reference to procedure;

 TMyProcedure = procedure of object; stdcall;

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

procedure TDerivedObject.SomeOtherProcedure;
begin
TTask.Run(procedure begin MyProcedure; end);
end;

关于delphi - 为什么这个过程不是 TProc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56174996/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com