WPP(プリプロセッサ)とVisual Studioコンパイラを使用して、「Event Tracing forWindows」(ETW)に基づくユーザーモードアプリケーションにトレースを追加しています。
このMSDNコンテンツでは、既存のマクロを変換して、マクロ内からトレースできるようにする方法について説明します。例として、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
この問題の回避策はありますか?MSFTが内部でWPPを広範囲に使用していることは知っていますが、これをどのように処理するのでしょうか...