如何在DPR范围内访问Delphi函数

5

我在维护一个老的Delphi程序(D7)时遇到了问题。大部分程序逻辑都在DPR文件中(这不是一个窗口程序),一些单元提供访问数据库等功能。我们需要从DB单元中输出一些调试信息,但调试功能在DPR中。由于它使用了DPR独有的类似主管道的东西,我们无法轻松地删除调试功能。将其分离就像试图区分意大利面和肉酱一样困难。

那么我们如何从下级使用的单元中调用在DPR范围声明的函数呢?在C++中,"::"运算符的相当于什么?

请不要告诉我重新设计这个应用程序。虽然我很想这样做,但我们不会得到必要的时间。而且如果我们重新设计这个项目,它也不会用Delphi编写。

4个回答

14
你可以在与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);
...

1
简单、优雅并且可行,非常感谢。这将为我们争取时间来适当地重构代码。 - Bob Moore

4
你无法这样做。单元层次结构是严格的。
有两个可能的选择:
1. 将.dpr中相关部分提取到新的单元中。请注意,将使用实现部分移动可能会破坏导入循环。createform*等内容可能不安全移动,这可能会使项目经理感到不满意。
2. 或者定义一些回调函数(函数、方法类型,类似于C中的functionpointer),并将代码从相关单元初始化中移到一个你需要时从.dpr中调用的过程中。

3

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


0

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

我们可以在项目中使用任何单元文件,因此您可以使用单元中的函数/过程。

如果必要,您可以为访问函数/过程添加单元名称前缀。

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

无论如何,Delphi将对象Pascal作为其核心,您可以使用合法的Pascal概念和对象Pascal概念访问任何必要的方法/过程/函数/属性。

无论您需要调用哪个文件,唯一除外的是某些外部库的声明文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接