Winapi 同一二进制文件中有多个MESSAGETABLE资源
有一个二进制文件应该同时具有ETW跟踪和编译的消息文件。这两个文件都使用消息编译器工具(mc.exe)编译,并生成二进制文件,这些二进制文件随后应编译到模块资源中 mc.exe生成一个资源文件include,如下所示:Winapi 同一二进制文件中有多个MESSAGETABLE资源,winapi,resources,event-log,etw,Winapi,Resources,Event Log,Etw,有一个二进制文件应该同时具有ETW跟踪和编译的消息文件。这两个文件都使用消息编译器工具(mc.exe)编译,并生成二进制文件,这些二进制文件随后应编译到模块资源中 mc.exe生成一个资源文件include,如下所示: 语言0x9,0x1 11“模块\u MSG00001.bin” 当其中有两个时,由于资源ID重复,二进制文件无法构建。如果我将其中一个ID更改为除1以外的任何其他ID,则二进制生成,但ether日志记录字符串将从事件查看器中消失,或者FormatMessageAPI将停止解码
语言0x9,0x1
11“模块\u MSG00001.bin”
当其中有两个时,由于资源ID重复,二进制文件无法构建。如果我将其中一个ID更改为除1以外的任何其他ID,则二进制生成,但ether日志记录字符串将从事件查看器中消失,或者FormatMessage
API将停止解码消息表中的错误代码
是否可以在同一二进制文件中包含多个MESSAGETABLE,以便事件查看器和格式化消息继续工作?我在谷歌上搜索了不少,但到目前为止还没有找到答案
我知道如何解决这个问题的唯一方法是编写一个工具,将两个消息表合并为一个,但可能我遗漏了什么。消息表类似于字符串表。每种语言只允许一种 执行此操作的唯一方法是将所有mc文件收集到一个大mc文件中,并使用
mc.exe
编译它(如您所想)。不幸的是,mc.exe甚至不接受多个源文件。即使在组合mc文件时,也必须注意只出现一次的LanguageName
块
应该可以编写一个程序来组合bin文件。
数据由一个消息\u资源\u数据
结构组成,其中包含一个或多个
更多的消息\u资源\u块
,这些块又可能由一个或多个
更多消息\u资源\u条目
结构。结构类似于
STRINGTABLE
资源的
我有一个描述MESSAGETABLE
格式的已断开的链接(我通过wayback包含了链接)
编辑有关结构的新文档也可以在MSDN中找到:,是的,格式记录在MSDN上,我在几个小时内编写了一个合并工具。为了解决这个问题,我创建了合并消息表文件。