【发布时间】:2013-01-12 19:49:03
【问题描述】:
据我了解MSDN documentation on Windows Data Types,HWND 等同于void*:
HWND - 窗口句柄。这种类型在 WinDef.h 中声明如下: typedef HANDLE HWND; HANDLE - 对象的句柄。这种类型在 WinNT.h 中声明如下: typedef PVOID HANDLE; PVOID - 指向任何类型的指针。此类型在 WinNT.h 中声明如下: typedef void *PVOID;
但是,如果我尝试以下操作:
int foo;
HWND bar = &foo;
我的编译器(VS2012)抱怨:
error C2440: '=' : cannot convert from 'int *' to 'HWND'
Types pointed to are unrelated; conversion requires reinterpret_cast,
C-style cast or function-style cast
我不知道为什么。我已经确定它与 typedef 的使用无关,因为以下编译正常:
typedef void* MyType;
int foo;
MyType bar = &foo;
是什么阻止我将任意对象的地址分配给HWND?
如果有人反对我首先尝试这样做,我想这样做的原因是我有一些涉及 HWNDs 的代码,我想通过提供 HWND 来进行单元测试s 具有我可以测试的已知值。
【问题讨论】:
-
你为什么要给一个显然不是窗口句柄的 HWND 变量赋值?
-
@selbie 我已经在问题的最后一段回答了这个问题。