gpt4 book ai didi

delphi - 如何定义适用于本地过程的过程类型?

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

我正在自定义线程中创建请求队列 TMyThread我在定义可用于子例程的过程类型时遇到困难。我有一个表示请求的记录、一个相应的记录指针以及在记录中使用的过程类型并且使用记录指针...

type
PRequest = ^TRequest;

TResponseProc = procedure(Sender: TMyThread; Request: PRequest);

TRequest = record
Request: String;
Proc: TResponseProc;
Response: String;
end;

问题是,当我实现一个名为 ResponseProc 的子例程时并尝试分配 ResponseProcTResponseProc ,它不起作用,并且 IDE 返回此错误消息:

[DCC Error] MyProject.dpr(42): E2094 Local procedure/function 'ResponseProc' assigned to procedure variable

如何定义此过程类型 TResponse并将其与子例程一起使用?

最佳答案

记录和程序声明都很好。该错误消息表明您正在使用本地过程,该过程是在另一个函数的范围内定义的。您不能使用指向此类函数的指针,因为调用它们需要额外的工作,而这无法用普通的函数指针来表达。 (编译器不允许创建指向调用者不知道如何使用的函数的指针。)

解决方案是将函数移到定义它的其他函数外部。如果由于内部函数使用外部函数中的变量而很难做到这一点,那么您必须弄清楚将它们的值传递给其他函数的其他方式,例如将它们作为参数传递,也许使它们成为该请求记录的附加成员。

另一种选择是使用过程引用,然后将本地过程定义为匿名过程。它可以访问局部变量,尽管只有 Delphi 和 C++ Builder 知道如何调用它,所以如果您需要外部 API 兼容性,它不是一个选择。

关于delphi - 如何定义适用于本地过程的过程类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15181766/

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