在过去的两天里,我一直在努力解决这个问题,似乎无法取得任何进展......
几乎从一个时刻到下一个时刻,Delphi XE2 将不再正确编译我的一个项目。也就是说,它实际上编译时没有错误,但在运行时我得到资源未找到错误,因为它本质上是主要的“表单”(在这种情况下它实际上是一个数据模块)。我已经从源代码控制恢复到项目的旧版本,我知道这些版本肯定可以正常工作,但无济于事。由此看来,它似乎一定是 Delphi/IDE 本身内部的东西,而不是项目源代码中的东西。但是,我也无法通过一个简单的测试项目或任何其他现实项目来重现该问题......它只发生在这个项目中。
另一个奇怪的事情是,当我使用 XN Resource Explorer 查看生成的二进制文件时,一切看起来都应该是:错误消息中提到的表单资源实际上是存在的并且完好无损......
在某些时候,我怀疑这可能是由我在 IDE 中安装的一位专家(例如 Uwe 的平台和 OI 专家以及 VersionInsightPlus、Andreas 的 IDEFixPack 和 DDevExtensions、GExperts)的错误引起的,但即使在禁用所有这些问题之后坚持。
不幸的是,我无法准确追踪何时开始发生这种情况,因为我已经工作了一段时间而没有实际运行二进制文件,修复 x64 目标的编译器警告和错误,调整更新的第三方工具的构建事件(本地化和许可证保护)等等……
有没有其他人见过这样的事情发生?关于如何确定这一点的更多想法?
有关该项目的更多详细信息:
- 它是使用 Add-In-Express 框架(即 COM-DLL)构建的 Outlook 插件。
- “主表单”是一个
TDataModule
-后代——我们还将我们自己的祖先类插入到层次结构中,即“插件模块”不是直接继承自TadxCOMAddInModule
——自定义祖先表单的资源也似乎存在并且完好无损使用资源查看器检查时输出二进制文件。 - 没有为 Win32 和 Win64 平台构建的运行时包。
如果您认为我错过了提及任何其他可能相关的细节,请告诉我。
更新:
我现在已将相关资源转移到另一台机器上。有趣的是,我在那里编译的 DLL 没有出现问题 - 在那台机器上......当我将它转移回原始机器并尝试调用它时,错误又回来了(强调这一点:这是确切的同一个 DLL 在一台机器上生成一个EResNotFound
但在另一台机器上不生成。当然,一旦我发现了这一点,我也进行了反向测试,你瞧,在原始机器上编译的 DLL 在另一台机器上运行没有错误......似乎这毕竟不是德尔福问题......但那是什么?
两台机器的区别:
- 机器 1(出现问题的机器):Windows 7 Ultimate English 64bit with Delphi XE2 Update 4
- 机器 2:Windows 7 Professional German 32bit with Delphi XE2 Update 3
在第三台机器上,除了没有 Delphi 外,几乎与第一台机器相同,两台机器生成的 DLL 都可以完美运行。