3

Windowsヘッダーの侵入的な#definesに対処する最良の方法は何ですか? 名前空間にあるかどうかに関係なく、同じ名前のシンボルを本当に定義する必要がある場合、エラーが発生する傾向があります。一部の定義は WIN32_LEAN_AND_MEAN で回避できることはわかっていますが、すべてではありません。この特定のケースでは、WinNT.h#6478 で "DELETE" 定義をヒットしています。このような非常に一般的なキーワードがたくさんあります。

私の当面の考えは、定数を宣言する前に #undef を実行することですが、それは非常に洗練されていない解決策です。定数はテキスト文字列に直接変換されるため、定数の名前を簡単に変更することはできません。現在の定数を正確に変更する必要があります。

頭に浮かぶ他の定義は、windowsx.h の GetFirstChild/GetNextSibling です...本当に?

4

3 に答える 3

1

現実的には、最もクリーンな解決策は、邪魔になるすべてのマクロを処理するラッパー ヘッダーを提供することだと思います#include <windows.h>#undefの代わりに、このラッパー ヘッダーを含めますwindows.h

于 2013-04-10T08:09:27.477 に答える
0

明らかな解決策は、 を含めないこと<windows.h>です。それを必要とするモジュールは非常に少ないはずであり、それらのモジュールでは、<windows.h>定義するシンボルを避ける必要があります。これらは、アプリケーションの何も含める必要のない低レベルのラッパーになるため、それほど難しくないはずです。

于 2013-04-10T08:16:53.023 に答える