我用的是 Delphi 11我有一个应用程序,我编译32或64位目标。
为了本地化我的应用,我使用这段代码在启动时加载我的语言文件。
LoadResStringFunc := nil; // Disable strings caching
NewInstance := LoadLibraryEx(FileName, 0, LOAD_LIBRARY_AS_DATAFILE);
....
LibModuleList.ResInstance := NewInstance;
FileName是一个DLL文件,其中包含已转换的资源(RCDATA和“字符串表”)。似乎这个文件是一个32位的DLL无论32/64位输出的exe文件选择。
它可以很好地与32位图像exe文件,但不工作了与应用程序编译为64位应用程序。错误代码是0XC 0000005访问冲突
LibModuleList.ResInstance := NewInstance;
设置,并且任何对system.pas中LoadResString()的调用。似乎记忆完全被破坏了。它突然出现(或者我不记得是什么原因造成的)。它使用64位exe文件生成。我完全重新设置了翻译项目从头开始(保持以前的当前一个放在一边),我仍然有同样的问题。我花了很多时间试图弄清楚这一点,但没有成功。什么会导致这种情况?
1条答案
按热度按时间kuhbmx9i1#
所以我找到了罪魁祸首…在排队
改成
当Windows决定为我提供一个大于32位的句柄时,它已经与NewInstance一起工作了多年。这是因为最近Windows更新!我是怎么找到这个的?通过将{$R+},这应该一直启用。尽管这样比较慢。另一个恼人的事情是,与本地化,当内联变量声明使用;“提取资源字符串”不再工作了,这真的很糟糕。Remi,加载DLL编译与32位编译器有关RCdata和String的工作肯定。这不是一个人会期望的,但这是一个例外看起来像。