加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 09:34:28 所属栏目:大数据 来源:网络整理
导读:我正在自定义线程TMyThread中创建一个请求队列,并且我在定义可用于子例程的过程类型时遇到困难.我有一个表示请求的记录,一个相应的记录指针,以及在记录中使用的过程类型并使用记录指针… type PRequest = ^TRequest; TResponseProc = procedure(Sender: TMyT
我正在自定义线程TMyThread中创建一个请求队列,并且我在定义可用于子例程的过程类型时遇到困难.我有一个表示请求的记录,一个相应的记录指针,以及在记录中使用的过程类型并使用记录指针…

type
  PRequest = ^TRequest;

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

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

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

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

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

解决方法

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

解决方案是将你的函数移动到你定义的任何其他函数之外.如果这很难做,因为内部函数使用外部函数的变量,那么你将不得不找出另一种方法来将它们的值传递给另一个函数.函数,例如通过将它们作为参数传递,可能使它们成为该请求记录的附加成员.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读