TraceMessage是一个WinAPI函数,具有可变数量的参数。它是一个跟踪函数,其表示形式类似于printf,它在Windows跟踪中生成跟踪消息。这里奇怪的部分是它接收格式字符串作为省略号的一部分,而不是作为专用参数。 可以使用我自己的函数“覆盖”此函数,然后需要调用TraceMessageVa(与TraceMessage相同,只需使用va_args而不是省略号)。
到目前为止一切顺利;但现在我想使用类似sprintf
的函数来访问跟踪的消息,该函数的格式字符串不在省略号中。因此我需要
- 从省略号中获取格式字符串参数;
- 创建一个没有第一个参数的新va_list。
有关怎么做的任何想法? Visual Studio编译器特有的解决方案也是可以接受的。谢谢!
答案 0 :(得分:4)
使用va_list
,您可以将其传递给一个函数,该函数在使用va_list
之后已经提取了一个或多个参数。然后va_arg
将表现为只“包含”其余参数。
我没有使用va_list
本身的经验,但我给出了使用标准TraceMessage
和测试函数的示例。你应该能够适当地适应。
E.g。
vprintf