6

特定のマクロを置き換えないようにプリプロセッサに指示するにはどうすればよいですか?

具体的な問題は次のとおりです。 Windows ヘッダー ファイルは GetMessage マクロを定義します。

API を含む C++ ヘッダー ファイルには、GetMessage メソッドがあります。メソッドの名前を変更したくありません。しかし、Windows で API を使用する場合、windows.h をインクルードすると、GetMessage メソッド呼び出しが GetMessageA に置き換えられます。

4

5 に答える 5

6

(GetMessage)(...)

GetMessageMSDN で

于 2008-11-14T22:54:46.820 に答える
6

やってみましたか

#undef GetMessage

あるいは

#ifdef GetMessage
#undef GetMessage
#endif

次に、GetMessageA または GetMessageW のいずれか適切なウィンドウを直接呼び出します。

wchar_t8 に char* を使用しているかどうかを知っておく必要があります。

(don.neufeld に感謝)

Brian はまた、いくつかの有用な情報があると述べています。 #pragma push_macro/pop_macro を使用して、マクロ定義をプッシュおよびポップすることもできます。これは、コード ブロック内のマクロ定義をオーバーライドする場合に最適です。

#pragma push_macro("GetMessage")
#undef GetMessage

// Your GetMessage usage/definition here

#pragma pop_macro("GetMessage")

ただし、これは MS 固有の機能であると思われるので、覚えておいてください。

于 2008-11-14T22:12:11.710 に答える
4

いくつかの有用な情報があります。 #pragma push_macro/pop_macro を使用して、マクロ定義をプッシュおよびポップすることもできます。これは、コード ブロック内のマクロ定義をオーバーライドする場合に最適です。

#pragma push_macro("GetMessage")
#undef GetMessage

// Your GetMessage usage/definition here

#pragma pop_macro("GetMessage")

ただし、これは MS 固有の機能であると思われるので、覚えておいてください。

于 2008-11-14T23:10:28.723 に答える
1

GetMessage と Window の GetMessage の両方を呼び出すコードはありますか?

そのようなコードは、それらの 2 つを区別できません。同じファイルで両方を呼び出すことはできません。

あるファイルで 1 つの関数を使用し、別のファイルで別の関数を使用する場合は、推奨される #undef を 1 つのファイルで実行してください。

于 2008-11-14T22:27:23.833 に答える
0

コメントで概説されている制約を考えると、これを行う唯一の方法は次のことを行うことです。

#undef GetMessage

API の GetMessage への呼び出しの直前。(そして、これは、ソース ファイルのこの時点以降、誰も Win32 GetMessage を呼び出していないことを前提としています。)

于 2008-11-14T22:36:17.230 に答える