我有一个Delphi DLL,其中包含一个使用各种第三方组件的表单。这个DLL被许多不同版本的Delphi使用。我将第三方组件编译到DLL中。我相信我仍然需要链接到一些“基础”Delphi软件包,如rtl,vcl等,所以我的DLL将使用相同的内存管理器和Delphi IDE使用的其他全局资源。如何找出需要链接的BPL?
理想情况下,我想在我的DLL或项目中指出一些实用程序,如果我只使用BPL并且没有可用的源文件,请列出它依赖的每个BPL。然后我可以查看该列表并选择我想在运行时加载的包。 “运行时软件包”下项目属性中给出的当前列表不完整(因为多年来一直在调整)。
答案 0 :(得分:9)
检查我写的名为“必需”的工具 - 您可以从http://www.drbob42.com/tools
下载答案 1 :(得分:5)
选中“使用运行时包构建”,将整个包列表保留原样。
执行项目|构建(不编译!)。构建完成后,使用项目|查看信息;生成的对话框将为您提供需要分发的实际包的列表。
Jeremy在使用软件包进行构建时,关于软件包默认列表为空的评论之后,这里是Delphi 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
答案 2 :(得分:2)
您可以评估Dependency Walker中包含的PE Information(取决于)或GExperts(图像如下)等工具。
答案 3 :(得分:1)
“这个DLL被许多不同版本的Delphi使用。”
你的意思是你有用Delphi 7编写的程序和用Delphi 2007等编写的其他使用相同预编译DLL的程序吗?
在这种情况下,您不能使用任何包在程序和DLL之间共享对象类型和内存,因为它们将使用不兼容的不同版本的软件包。