【问题标题】:How to access delphi function at DPR scope如何在 DPR 范围内访问 delphi 函数
【发布时间】:2009-07-27 10:30:10
【问题描述】:

我在维护 Delphi 程序 (D7) 时遇到问题。很多程序逻辑都在 DPR 文件中(这不是一个窗口程序),其中一些单元提供了访问数据库等功能。我们需要从 DB 单元中进行一些调试,但调试功能在 DPR 中。我们不能轻易地去掉调试功能,因为它使用了 DPR 独有的东西,比如它的主管道。把它分开就像试图把意大利面和肉丸酱分开。

那么我们如何从下级使用单元调用在 DPR 范围内声明的函数? C++ 中 :: 运算符的等价物是什么?

请不要告诉我重新设计应用程序。我很乐意,但我们不会得到必要的时间。另外,如果我们重新设计这只小狗,它就不会在 Delphi 中了。

【问题讨论】:

    标签: delphi


    【解决方案1】:

    您可以在与 DPR 中的函数签名匹配的单元中声明方法变量。在程序的最开始,您将方法变量设置为函数。在单元内部调用方法变量。

    例子:

    (DPR)

    uses
      Unit1;
    
    function DoSomething(Par: Integer): Integer;
    begin
    ...
    end;
    
    ...
    begin
      DoSomethingVar := DoSomething;
      ...
    end;
    

    (单位)

    unit Unit1;
    
    interface
    ...
    var
      DoSomethingVar: function(Par1: Integer): Integer;
    ...
    implementation
    ...
      SomeResult := DoSomethingVar(SomeParameter);
    ...
    

    【讨论】:

    • 简单、优雅且有效,谢谢。这将为我们争取正确重构代码的时间。
    【解决方案2】:

    你不能。单位层次结构僵化。

    有两种可能的选择:

    • 将 .dpr 的相关部分拉出到新单元中。请记住,将使用转移到实现可能会中断导入周期。 createform* 的东西移动起来可能不安全,这可能会让项目经理感到不安。
    • 或定义一些回调函数(函数、方法类型,如 C 中的函数指针),并将代码从相关的单元初始化移至您在必要时从 .dpr 调用的过程。

    【讨论】:

      【解决方案3】:

      我不知道如何在其他单元中使用 .dpr 中的函数,但如果您必须更改代码,只需将 .dpr 更改为普通单元,然后在新的 .dpr 和其他单元中使用它的函数/例程。

      【讨论】:

        【解决方案4】:

        .dpr 是最基础的 pascal 项目文件。

        我们可以使用项目中的任何单元文件,因此,您可以使用 单元中的功能/程序。

        如有必要,您可以在单位名称前加上前缀以访问 功能/程序。

        如果函数/过程属于特定类,则需要 创建一个实例来访问函数/过程,因为 这是一种方法。

        不管怎样,Delphi 以 object pascal 为核心,可以访问 任何必要的方法/程序/功能/具有合法性的属性 帕斯卡概念和对象帕斯卡概念。

        无论你需要调用哪个文件,只有一个除了 是一些外部库的声明文件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-04-23
          • 2021-12-30
          • 2017-09-24
          • 2018-01-08
          • 2021-10-16
          • 1970-01-01
          • 2020-05-31
          相关资源
          最近更新 更多