2016-03-31 24 views
1

我正在創建一個腳本方法庫,只希望在需要時將它們包含在我的安裝程序中。在Inno Setup Preprocessor中包含一次性功能?

某些方法需要使用其他方法,因此我將#include "filename.iss"用於需要它的方法所需的方法。

但是,如果我在包含通用文件的安裝程序腳本文件中包含兩個文件,則在包含它的第二個文件中會出現「Duplicate identifier」錯誤。

我尋找的東西像#include-once,但找不到任何結果。

要重現你可以只包括兩次在同一個文件:

#include "AddReplaceLinesInFile.iss" 
#include "AddReplaceLinesInFile.iss" 

我可以看到,以避免這一點就是不要把包括與需要他們,只是將它們添加方法的文件的唯一方法在主安裝程序腳本中。

我將方法文件頂部的includes包含在需要它們的地方,但是將它們評論出來 - 用於文檔目的,並且可以方便地將它們複製並粘貼到主安裝程序腳本中。不過,我更喜歡使用類似include-once的功能。

Inno Setup是否有類似include-once的方法或者測試已定義方法的方法,以便我可以創建類似的東西?

TIA

回答

2

用作C/C用於++相同的特技,所述include guard

在C和C++編程語言中,一個的#include後衛,有時稱爲宏後衛,是一個在處理include指令時用於避免雙重包含問題的特定構造


環繞代碼中包含的文件,#ifndef UniqueName#define UniqueName ...#endif

#ifndef IncludeIss 
#define IncludeIss 

procedure Test; 
begin 
end; 

#endif 

UniqueName通常是相同的文件名,與標點刪除(使其有效的標識符)。即對於include.iss的名字可以是IncludeIss


請參閱Inno Setup Preprocessor: #ifdef, #ifndef, #ifexist, #ifnexist

+0

DOH!我應該想到 - thx! – Toby

0

有沒有這樣的事情,包括一次。

Inno Setup是基於Pascal的,其中功能(和程序)全球!沒有私人的。

預處理符號被限定在.iss文件並使其全球使用公共關鍵字。

變量有真正令人不愉快的行爲:如果您定義全局變量(在[代碼]部分)與本地變量同名,您永遠不知道該值是真正分配給哪個變量。

編譯器不檢查這是非常糟糕的。