好的 - 我们有一个有趣的问题。
一些背景知识:
我们的主要应用程序使用Indy 10.但是,我们采用Indy 10 源代码并修复它中的错误,重新编译并安装我们自己的Indy集 组件。
我们正在迁移到Delphi XE并希望开始使用DataSnap。
DataSnap需要Indy的“官方发货”版本 与我们的定制版Indy不兼容。
我们的DataSnap服务器将是独立的应用程序,但自从我们开始 在IDE中安装了我们自己的Indy,我们无法“跨越溪流”。
好的,因此,我们无法使用Delphi XE的DataSnap 因为这种兼容性问题,请使用框。
所以我的问题是:
是否可以使用新的/不同版本的Indy在Delphi XE中重新编译DataSnap包?
感谢您的意见。
答案 0 :(得分:3)
普遍的看法是不,这是不可能的,因为并非所有来源都是由Embarcadero提供的,其中一些来源依赖于Indy的发布。 (这对最终用户来说非常令人沮丧,因为Delphi附带的Indy版本已经过时了,有时当时选择的版本不一定非常好。)
参见相关的SO问题: Is it possible to use Indy 10.5.8.0 in Delphi XE and DataSnap?
另见Indy项目页面: http://www.indyproject.org/Sockets/Docs/indy10Installation.de.aspx 其中说明:
注意:在D / CB / RAD 2009+中,DataSnap使用 Indy 10内部。安装新的 Indy的版本将呈现DataSnap 无法使用,因为它无法使用 加载Indy包。 DataSnap是针对Indy编译的 随IDE一起提供的软件包 无法通过结束重新编译DataSnap 用户。如果需要使用DataSnap, 那么你需要保持 原装Indy 10包用于 DataSnap项目。
据说下一个版本应该允许更容易更新Indy。
答案 1 :(得分:2)
如果包含所有DataSnap源,当然可以使用某种PE可执行分析程序来检测BPL中使用的类和单元(因为BPL只是自定义的DLL)。 GExperts提供了一个非常简单易用的方法。
在BPL中,来自GExperts \ PE Information的导出列表行的格式类似于 @xp $ @ [nn] [UnitName] @ [TypeName] (对于类型)和 @ [ UnitName] {@ [Type>]} @ [单位全局元素,如程序或变量] (其余部分)。
您可以将该列表保存到文件和GREP以获取BPL上使用的单位列表。
真实例子(vcl140.bpl):