2009-10-13 63 views
3

我有一個Delphi DLL,它包含一個使用各種第三方組件的表單。該DLL被許多不同版本的Delphi使用。我將第三方組件編譯到DLL中。我相信我仍然需要鏈接到一些「基礎」Delphi包,比如rtl,vcl等,所以我的DLL將使用和Delphi IDE一樣的內存管理器和其他全局資源。如何找出我需要鏈接的BPL?確定要包含的Delphi運行時軟件包

理想情況下,我想指出一些實用程序在我的DLL或項目,並列出每個BPL,它將依賴於如果我只使用BPL並且沒有可用的源文件。然後我可以查看該列表並選擇我想在運行時加載的包。在「運行時包」下的項目屬性中給出的當前列表是不完整的(因爲它經過多年調整)。

回答

5

選中「使用運行時軟件包構建」,將整個軟件包列表保持原樣。

做一個項目|生成(不編譯!)。構建完成後,使用「項目」|「查看信息」;結果對話框會給你一個你需要分發的實際包的列表。

傑里米的關於包是空的時候,他能夠與包構建的默認列表評論後,這裏是從選項對話框的列表從2010年德爾福:

vclx;vcl;vclimg;dbrtl;Rave77VCL;bdertl;rtl;vclactnband;xmlrtl; 
    vcldb;vcldbx;vcltouch;dsnap;dsnapcon;TeeUI;TeeDB;Tee;vclib; 
    ibxpress;adortl;IndyCore;IndySystem;IndyProtocols;inet; 
    intrawebdb_100_140;Intraweb_100_140;VclSmp;vclie;inetdb; 
    webdsnap;websnap;inetdbbde;inetdbxpress;soaprtl;vclribbon; 
    DbxCommonDriver;DbxClientDriver;DBXInterBaseDriver;DBXMySQLDriver; 
    dbexpress;dbxcds;SynEdit_R2009 
+0

這顯示靜態鏈接的包,但如果你在運行時加載一個,有沒有辦法讓任何靜態分析工具 – 2009-10-13 20:13:30

+1

肯您好,感謝您的答覆信息。我正在使用Delphi 2010.沒有Project | View Information菜單項,只有OK按鈕才能關閉構建對話框。還請注意我的評論,即當前的運行時軟件包列表不完整(現在它只包含vcl)。 – 2009-10-13 20:18:07

+2

@Jeremy:是的,有。它在「項目」菜單中並在構建之後啓用。看起來他們已經稍微改變了菜單文本,但是,該菜單上的「的信息」。爲了澄清,它在構建對話框中是* not *;它在關閉構建對話框後位於IDE的主項目菜單中。 – 2009-10-13 20:20:09

8

檢查一個工具,我編寫的名爲「必選」 - 你可以從http://www.drbob42.com/tools下載

+0

感謝Bob。我通過「Project - > Information for 」菜單從IDE獲得了所需的信息,但我嘗試了您的實用程序並且它也起作用。 :) – 2009-10-13 20:48:47

+1

嘿,很高興見到你在這裏! – 2009-10-13 20:49:41

0

「這個DLL被許多不同版本的Delphi使用。」

你的意思是說你有用Delphi 7編寫的程序和用Delphi 2007等編寫的其他程序使用相同的預編譯DLL?

在這種情況下,您不能使用任何程序包在程序和DLL之間共享對象類型和內存,因爲它們將使用不兼容的不同版本的程序包。

+0

該DLL包含不同版本的Delphi使用的屬性編輯器。我的Delphi設計時間包調用到DLL中。我不在設計時間包和DLL之間傳遞對象類型,只有像字符串,整數等「基本」類型。我相信因爲我傳遞了字符串,所以我需要使用ShareMem。 – 2009-10-14 15:12:49

+0

如果你傳遞字符串,那麼是的,你需要使用ShareMem。然後是IDE是否也使用ShareMem的問題。如果沒有,那麼你不能傳遞字符串。改爲傳遞PAnsiChar或PWideChar。 – 2009-10-14 15:40:03

相關問題