2011-01-21 53 views
2

我正在使用WPP(預處理器)和Visual Studio編譯器爲基於「Windows事件跟蹤」(ETW)的用戶模式應用程序添加跟蹤。在WPP跟蹤期間不支持多行MACRO

這個MSDN content解釋瞭如何轉換現有的宏以允許從它們內部進行跟蹤。這個例子有CHECK_HR,它獲得一個參數(HR),並且如果它不是0,則生成一個跟蹤。

現在,我發現如果參數是多行的,生成的預處理器函數不起作用,由於WPP的工作方式。但是我找不到任何這樣的問題!

CHECK_HR(DoSomething(a,b,c)); // works 
CHECK_HR(DoSomething(a, 
    b, c)); // don't work 

問題是,當宏由預處理器在File.cpp WPP的線17遇到它生成一個稱爲類似wpp_File_cpp17功能,並使用LINE從宏調用它。但多行宏如上__ LINE__將是18人會得到一個錯誤:

wpp_File_cpp18: unknown function 

沒有人有針對此問題的變通?我知道微軟在內部廣泛使用WPP,我不知道他們是如何處理這...

+0

我已經確認DDK示例中不支持多行宏的行爲! – 2011-01-28 18:54:12

回答

0

我試圖重現這個問題,沒有成功 - 多線WPP調用爲我工作,所以你得到的錯誤似乎種奇怪。您是否以任何方式修改了CHECK_HR宏?

你可以嘗試把斜線在呼叫的每一行的末尾:

CHECK_HR(DoSomething(a, \ 
        b, \ 
        c)); 

而且,在你的例子你缺少一個右括號,這將導致WPP_CALL_blahblah_undefined。但在這個例子中,這很可能只是一個錯字。

+0

有趣!你使用哪個版本的DDK? – 2012-07-02 17:16:46