2

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を広範囲に使用していることは知っていますが、これをどのように処理するのでしょうか...

4

1 に答える 1

0

私はこの問題を再現しようとしましたが、成功しませんでした。複数行のWPP呼び出しが機能するため、発生するエラーは奇妙に思えます。CHECK_HRマクロを何らかの方法で変更しましたか?

呼び出しの各行の最後にスラッシュを入れてみることができます。

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

また、あなたの例では、閉じ括弧がありません。これにより、WPP_CALL_blahblah_undefinedが発生します。しかし、おそらくそれはこの例のタイプミスにすぎません。

于 2012-07-02T14:26:35.137 に答える