0

DDKビルドシステムとMakefileを使用していないWindowsドライバープロジェクトを、VisualStudio2012内からコンパイルできるプロジェクトに変換しようとしています。

プロジェクトオプションを設定するためにこのガイドに従いましたが、コンパイルしようとすると次の警告が表示されます。

warning : Using system operator==/!= for GUIDs

これを修正するために設定できるプロジェクト構成フラグがあると思います。助けていただければ幸いです。

4

2 に答える 2

2

これは、GUIDが重要な構造タイプであるため、GUIDで== /!=を使用すると正しい結果が得られない可能性があるためです。

C ++としてコンパイルすると、MSDNのIsEqualCLSIDguiddef.hを使用して== /!=を実装します。

あなたの場合、問題は、DDKヘッダーが== /!=GUIDのC++演算子のオーバーロードを実装できないことです。guiddef.hDDKヘッダーを含める前に含まれているため、これが発生するように見えます。どうやらguiddef.h、DDKは== /!=演算子の実装方法に同意していないため、DDKは警告を発行します。

だから私の推測では、あなたが本当にする必要があるのは、インクルードの順序を再検討することだけだと思います。また、VS 2012が手元にないため確認できませんが、この警告自体が「新しい」唯一のものであり、プログラムの実際の動作がVS2008から変更されていない可能性があります。VS2008は同じことを行った可能性がありますが、プログラマーに警告する警告を発行できませんでした。その場合、古いコンパイラで動作した場合は、おそらく新しいコンパイラでも動作するはずです。

于 2013-02-22T15:45:02.533 に答える
0

ここから、その警告は次のように与えられます。

#if defined(_SYS_GUID_OPERATOR_EQ_)
#define _GUID_OPERATORS_
#pragma message("WARNING: Using system operator==/!= for GUIDs")
#endif

そして、それはを定義することによって無効にできるように見えます_NO_SYS_GUID_OPERATOR_EQ_。したがって、のコンパイラオプションを試してください/D_NO_SYS_GUID_OPERATOR_EQ_

ただし、なぜそれをしているのかわからない限り、何かをすることはお勧めしません。おそらくあなたはあなた自身の過負荷を供給することになっていますか?

于 2013-02-22T15:31:40.090 に答える