2014-06-15 24 views
0

我從Delphi XE5開始,我想將我的應用程序分成一個exe文件和多個可重用的庫。這意味着我不想將正在運行的* .exe應用程序拆分爲DLL或運行時軟件包。如何將Delphi解決方案拆分爲可重用的運行時包?

要做到這一點,我已經看到,在Delphi中,我們可以創建運行包,我也跟着下面的步驟:

  1. 我創建了一個新的VCL窗體應用程序項目(EXE項目)。
  2. 我已經爲項目組添加了一個新的Package項目(BPL項目),並且我修改了它的項目選項以將使用選項設置爲「僅運行時」,並將控件構建爲「顯式重建」。
  3. 我已經添加了EXE項目和BPL項目之間的依賴關係(EXE項目取決於BPL項目)。
  4. 最後,我編譯了BPL項目,並將生成的DCP文件作爲運行時包添加到EXE項目(項目選項/包/運行時包)中。

但是,當我在EXE項目添加引用從BPL項目中使用的模塊(MODULEX例如),編譯器給我這樣的錯誤:

[dcc32致命錯誤] ModuleX.pas (7):F1026文件未找到:'C:\ DDDProject \ MyEXEProject \ ModuleX.dcu'

如果我在EXE項目(MyEXEProject)中標記爲勾選'與運行包關聯'選項,則解決方案無錯誤地編譯但我無法運行或調試應用程序。

請問任何人都可以幫我嗎?

回答

0

我不想在DLL或運行時包中拆分運行的* .exe應用程序。

運行時包BPL文件 DLL。這就是允許他們在多個EXE中共享的原因。它們是內置特殊VCL/FMX處理的普通DLL。

當您啓用「Link with runtime packages」選項時,您將EXE文件鏈接到BPL文件(或DYLIB或SO文件,如果編譯爲除了Windows以外的平臺),所以你必須用你的EXE文件分發BPL文件(以及任何其它依賴的BPL文件,如rtl190.bpl和vcl190.bpl)。所以他們必須在EXE文件夾中,或者至少在OS search path中,以便EXE運行。

當您禁用「Link with runtime packages」選項時,您的軟件包的代碼會直接靜態鏈接到EXE文件中,因此您需要確保EXE項目的搜索路徑包含文件夾中包含的DCU文件,位於。

如果你想創建一個可重複使用的庫,但沒有BPL,然後創建一個靜態庫(一個LIB文件),而不是一個運行時包。然後,您可以根據需要將LIB文件添加到多個項目。

相關問題