2009-07-27 48 views
5

我在維護舊的 Delphi程序(D7)時遇到問題。很多程序邏輯都在DPR文件中(這不是一個窗口化的程序),有些單元提供了訪問數據庫的功能。我們需要從DB單元中獲得一些調試,但調試功能位於DPR中。我們不能輕易剝奪調試功能,因爲它使用DPR獨有的東西,比如它的主要管道。把它分開就像試圖挑逗意大利麪和肉丸醬一樣。如何在DPR範圍訪問德爾福功能

那麼我們如何調用在DPR範圍內從下屬使用單位聲明的函數呢? C++中的::運算符等價於什麼?

請不要告訴我重新設計應用程序。我很想去,但我們不會得到必要的時間。另外如果我們重新設計這隻小狗,它不會在德爾福。

回答

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

Sinple,優雅而有效,謝謝。這會讓我們有時間正確地重構代碼。 – 2009-07-27 14:24:25

4

你不能。單位層次是僵化的。

有兩個可能的選擇:

  • 的.dpr的相關部分拉出到一個新的單位。請記住,將用途轉移到實施可能會中斷導入週期。 createform *東西可能不安全,這可能會讓項目經理感到不安。
  • 或定義一些回調函數(函數,方法類型,如C中的函數指針),並將代碼從相關的單元初始化移出,如果需要,您可以從.dpr調用該過程。
3

我不知道如何使用功能,從其他單位.dpr,但如果你有改變的代碼只需更改.dpr正常單元,然後用它在新.dpr而在其他功能/程序單位。

0

.dpr是最fundmental帕斯卡項目文件。

我們可以使用項目中的任何單位文件等等,你可以使用 這個單位的函數/程序。

如有必要,您可以在設備名稱前加上用於訪問 函數/過程的名稱。

如果函數/過程屬於特定類,您需要 來創建一個實例來訪問該函數/過程,因爲它是一個方法 。

無論如何,德爾福使用對象pascal作爲其核心,您可以訪問 任何必要的方法/程序/函數/屬性與合法的 pascal概念和對象pascal概念。

無論您需要調用哪個文件,除 之外的唯一文件是某個外部庫的decalration文件。