正如我从有关 Windows Data Types的 MSDN 文档中了解到的那样, aHWND
相当于 a 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
我无法弄清楚原因。我已经确定它与 typedefs 的使用无关,因为以下编译良好:
typedef void* MyType;
int foo;
MyType bar = &foo;
是什么阻止我将任意对象的地址分配给 a HWND
?
如果有人反对我首先尝试这样做,我想这样做的原因是我有一些涉及HWND
s 的代码,我想通过为HWND
s 提供我可以测试的已知值来进行单元测试.