8

Visual Studio 2010(C ++、管理されていない)でのデバッグ、情報unused ???またはunused 0意味は何ですか?2つのスクリーンショットを添付HWNDしました。子は既存のウィンドウにあります。

HWNDまた、が「未使用」と表示されることもあれば、「0」と表示されることもあるという事実にも混乱しています。未割り当てのメモリを参照するポインタがある場合、状況は理解できますが、私の特定のケースでは、ウィンドウはすでに作成されており、有効です。

VS2010未使用=???

VS2010未使用=0

4

1 に答える 1

7

これは90年代初頭にさかのぼり、Windowsオブジェクトのハンドルを宣言する型としてHANDLEだけがあったときにさかのぼります。これはバグファクトリでしたが、プログラマーはコードをいじって、たとえば、ウィンドウハンドルが必要な場所にフォントハンドルを渡すことができました。そのため、STRICTマクロは後で追加され、ハンドルタイプが再宣言されたため、混合するとコンパイラエラーが発生します。これは、コンテンツ用に編集されたwinnt.hでは次のようになります。

#ifdef STRICT
   typedef void *HANDLE;
   #define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
#else
   typedef PVOID HANDLE;
   #define DECLARE_HANDLE(name) typedef HANDLE name
#endif

使用例:

DECLARE_HANDLE(HWND);

structマクロスープは、STRICTがオンになっているときにHWNDが予期される場所でHFONTを使用できないようにし、構造体タイプにタイプの不一致を生成します。

これで、「未使用」がどこから来ているかを確認できます。実際には使用されておらず、Windowsのみがハンドル値を作成できます。0または-1が問題の確実な兆候であるハンドル値を確認できるため、デバッガーで役立ちます。

STRICTの詳細については、このMSDNの記事を参照してください。

于 2012-06-26T09:56:29.087 に答える