- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到如下情况:
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/
我遇到如下情况: interface type IMyInterface = interface [GUID] procedure MyProcedure; stdca
刚刚发现了一些相当有趣的事情: var Queue : TQueue ; MyProc : TProc; ... MyProc := Queue.Dequeue; 我想你已经明白这里的意图了
当我有一个 TList(即“对过程的引用”的列表)并清除它时,匿名方法中使用的所有捕获的变量是否都会被释放,从而不会发生泄漏? 即。清除 TList 后引用计数是否生效? 最佳答案 委托(delega
这里有人知道 Delphi 如何表示对过程的引用吗? 例如 var proc: TProc; ... proc = procedure begin beep end; 我们在“proc”中得到了什
我们使用TList>与一些function ... of object位于其中,现在想要 Remove()再次一些条目。但它不起作用,因为显然你根本无法比较这些 reference to ...事情可
除此之外post其接受的答案仍然非常神秘: @Button1.OnClick := pPointer(Cardinal(pPointer( procedure (sender: tObject) be
我有以下方法: InstanceOfMyType(const Name: String; const Modifiers: array of TFunc>); 这个想法是在单元测试中允许流畅的设置代码
我有一个日志记录类,它链接到许多模块。这个类的main方法是一个类方法: type TSeverity = (seInfo, seWarning, seError); TLogger = clas
我是一名优秀的程序员,十分优秀!