问题描述
我正在尝试Delphi 10.4。过去,对Windows应用程序进行本地化一直很吸引人,但是现在当我动态加载RC DLL文件时,它仅更改RCDATA,而不再更改“字符串表”。
NewInst := LoadLibraryEx(FileName,LOAD_LIBRARY_AS_DATAFILE);
....
CurModule.ResInstance := NewInstance;
FileName
是DLL文件,具有我可以使用“ Resource Hacker”软件进行编辑的资源(RCDATA和“字符串表”),并且可以看到其中包含“字符串表”的内容符合预期。 / p>
它适用于RCDATA(所有形式都已转换),但现在不再包含在任何Resourcestring
文件的.pas
部分中的“字符串表”,并且所有字符串均保持原始语言。
在以前的Delphi版本(如10.2)中,它运行良好,我不知道为什么该版本无法运行。
解决方法
核心问题 问题在于资源字符串现在已被缓存,并且在加载新的资源数据后您无权清除缓存:(
请参见https://quality.embarcadero.com/browse/RSP-30853 (如果您认为必须修正,则投一票)
解决方法
我将资源字符串缓存机制“克隆”到一个单独的单元中,并将LoadResStringFunc
重新路由到我的克隆单元中。在这里,我允许访问resstringcache,因此可以在加载新资源后清除它。
还有另一种解决方案。通过将LoadResStringFunc分配为nil来禁用新的缓存。程序的开头是个不错的选择。
begin
>>> ADD THIS to disable the caching
LoadResStringFunc := nil;
>>>
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1,Form1);
Application.Run;
end.