JBe*_*ley 1 c++ winapi pointers
据我从Windows数据类型的MSDN文档中了解,a 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;
Run Code Online (Sandbox Code Playgroud)
我的编译器(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
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚原因.我已经确定它与typedef的使用无关,因为以下编译很好:
typedef void* MyType;
int foo;
MyType bar = &foo;
Run Code Online (Sandbox Code Playgroud)
是什么阻止我将任意对象的地址分配给HWND?
我想这样做的原因是,如果有人反对我试图在第一时间做这件事,那就是我有一些涉及HWNDs的代码,我希望通过为HWNDs提供我可以测试的已知值进行单元测试.
如果STRICT在编译期间定义,则将HWNDa定义为指向虚拟结构而不是a的指针void*.
STRICT添加的原因之一是使编译器能够捕获您想要执行的隐式转换(许多人确实没有).由于您实际上想要"松散检查",请确保STRICT未定义.
或者只是演员.
(请注意,yic81在您链接的MSDN文档页面上的注释表明它需要进行一些更新)
| 归档时间: |
|
| 查看次数: |
827 次 |
| 最近记录: |