我的问题就像Delphi编译器在编译应用程序时生成并为所有ResourceStrings分配数字标识符。很少有文档说明在重新编译应用程序时,资源字符串的数字标识符会被重新生成,并且它们警告依赖它,因为它再生后可能会发生变化。有很多第三方本地化工具使用和存储这个资源字符串数字标识符进行内部引用和转换。有没有办法阻止编译器重新生成此资源字符串数字标识符或强制它使用手动生成的数字标识符?
答案 0 :(得分:2)
您无法控制编译器如何生成字符串表资源以及数字标识符。
如果您希望使用依赖于数字标识符的外部工具,那么您应该以经典方式构建字符串表。在文本文件中定义字符串表。编译为资源并链接到特定于语言的资源DLL。这将使编码不太方便,并且您可以决定是否值得使用外部工具。
答案 1 :(得分:2)
您可以通过指定--drc或“Project | Options | Delphi Compiler | Linker | Output resource string .drc file”开关从编译器获取资源编译器,可编译文件。这将指示编译器生成.drc文件,该文件将包含资源字符串内容和编译器分配的值。
如果为每个构建执行此操作,即使编译器重新排列指定的值,您也将始终知道它们是什么。编译器根据unit-name和资源字符串标识符为每个资源字符串生成一个标识符,因此即使值发生更改,它也始终保持稳定。
然后可以翻译或以其他方式处理此.drc文件,然后将其重新编译为.res文件。然后,可以将此.res文件链接到一个特殊的“仅限资源”的dll,该dll具有指示语言的“.dll”以外的特定扩展名。正确设置系统语言后,将加载此dll并使用字符串而不是内置资源。