Jer*_*dge 4 delphi subroutine delphi-xe2
我正在自定义线程中创建一个请求队列,TMyThread并且我在定义可用于子例程的过程类型时遇到困难.我有一个表示请求的记录,一个相应的记录指针,以及在记录中使用的过程类型并使用记录指针...
type
PRequest = ^TRequest;
TResponseProc = procedure(Sender: TMyThread; Request: PRequest);
TRequest = record
Request: String;
Proc: TResponseProc;
Response: String;
end;
Run Code Online (Sandbox Code Playgroud)
问题是,当我实现一个名为的子例程ResponseProc并尝试分配ResponseProc给它时TResponseProc,它不起作用,并且IDE返回此错误消息:
[DCC Error] MyProject.dpr(42): E2094 Local procedure/function 'ResponseProc' assigned to procedure variable
Run Code Online (Sandbox Code Playgroud)
如何定义此过程类型TResponse并将其与子例程一起使用?
记录和程序声明都没问题.该错误消息表明您正在使用本地过程,该过程是在另一个函数的范围内定义的过程.您不能使用指向这些函数的指针,因为它们需要额外的工作来调用,而不能用普通的函数指针表示.(编译器不允许创建指向调用者不知道如何使用的函数的指针.)
解决的办法是将你的函数之外的任何其他功能你定义它.如果这是很难做到的,因为内部函数使用变量从外部函数,那么你就必须找出让他们的价值观对其他的一些其他的方式函数,例如通过将它们作为参数传递,可能使它们成为该请求记录的附加成员.
另一种选择是使用过程引用,然后将本地过程定义为匿名过程.它可以访问局部变量,虽然只有Delphi和C++ Builder知道如何调用它,所以如果你需要外部API兼容性,它不是一个选项.