我看到你的另一个帖子:
请求大神们汉化AE调色插件Looks里面有一个同样界面的截图。上面有个英文字串:Skin Overlay,应该是你所说的翻译后无法显示的字串。
查看了这个字串前面的情况,没有任何标识符。
这个字串的字节长度、引用地址和引用代码为:
原始字串字节长度 12 (十六进制为 0C)
原始字串引用代码 62A43F00,49A43F00
原始字串引用地址 1375978,1376003
查引用代码 62A43F00 前面的字节情况,发现有长度标识符 0C 00 00 00:
查引用代码 49A43F00 前面的字节情况,发现也有长度标识符 0C 00 00 00:
这些长度标识符的前后字节都是以 41B8 开始,488D15 结束。
我们再来看看界面中显示的 TOOLS 这个字串的情况,是不是和上面的字串一样:
这个字串前同样没有任何标识符,它的字节长度、引用地址和引用代码为:
原始字串字节长度 5(十六进制为 05)
原始字串引用代码 39BA3F00,20BA3F00,0CAB3F00
原始字串引用地址 1370303,1370328,1374188
第一个 39BA3F00 引用代码前面的字节情况:
第二个 20BA3F00 引用代码前面的字节情况:
第二个 0CAB3F00 引用代码前面的字节情况:
可以看出,第一和第二个引用代码前都有字串长度标识符 05 00 00 00,并且其前后字节都是以 41B8 开始,488D15 结束。
第三个引用代码前面没有长度标识符,说明其不被特殊的方式显示,而以常规的方法显示。
再看看 SCOPES 这个字串的情况,和上面二个字串一样:
原始字串字节长度 6(十六进制为 06)
原始字串引用代码 34A23F00,1BA23F00
原始字串引用地址 1376568,1376593
第一和第二个引用代码前都有字串长度标识符 06 00 00 00,而且其前后字节也都是以 41B8 开始,488D15 结束。
因此,可以确定翻译后无法显示的原因是没有同时修改引用地址前面的字串长度标识符引起的。
下面就演示用非标宏来在写入时自动修改这个长度标识符。
1、先自定义一个字串类型,如下图:
注意:考虑到其他字串可能和我们查看过的字串不一样,上图中的长度标识符的位置设置为自动。开始标记和结束标记可以减少字节位数。具体可以参阅非标宏中字串类型的帮助。
2、在提取字串对话框中,选择“自定义字串”选项,在弹出的对话框中,选用刚定义的 MBLooksUI_x64.dll 字串类型。同时取消全为大写的过滤选项的选择,因为这个文件中有大写的字串需要提取。
3、提取字串后,我们来过滤显示一下,看看有哪些字串是我们定义的字串类型:
4、现在翻译后写入试试看,看看引用代码前的长度标识符是否会被自动修改:
原始字串 Skin Overlay
原始字串字节长度 12
翻译字串 皮肤覆盖
翻译字串字节长度 8
原始字串 TOOLS
原始字串字节长度 5
翻译字串 工具
翻译字串字节长度 4
可以看出,这二个字串的长度标识符都被修改了。由于翻译都没有超长,所以引用代码不变。