gpt4 book ai didi

c++ - 为 HWND 分配任意地址

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:27:26 24 4
gpt4 key购买 nike

据我了解 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

我想这样做的原因是,如果有人反对我首先尝试这样做,是因为我有一些涉及 HWND 的代码,我想通过为 HWND 提供我可以测试的已知值。

最佳答案

如果在编译期间定义了 STRICT,则将 HWND 定义为指向虚拟结构的指针,而不是 void*

添加 STRICT 的原因之一是使编译器能够捕获您想要执行的那种隐式转换(许多人确实没有)。由于您实际上需要“松散检查”,因此请确保未定义 STRICT

或者只是转换。

(请注意,yic81 在您链接的 MSDN 文档页面上的评论表明它需要一些更新)

关于c++ - 为 HWND 分配任意地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14297280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com