Winapi 同一二进制文件中有多个MESSAGETABLE资源

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将停止解码

有一个二进制文件应该同时具有ETW跟踪和编译的消息文件。这两个文件都使用消息编译器工具(mc.exe)编译,并生成二进制文件,这些二进制文件随后应编译到模块资源中

mc.exe生成一个资源文件include,如下所示:

语言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上,我在几个小时内编写了一个合并工具。为了解决这个问题,我创建了合并消息表文件。