gpt4 book ai didi

c++ - MAKEINTRESOURCE 返回资源 ID 的错误指针

转载 作者:行者123 更新时间:2023-11-30 04:28:49 26 4
gpt4 key购买 nike

我遇到一个问题,每当我将 MFC 资源 ID 传递给它时,MAKEINTRESOURCE 宏似乎总是返回一个错误的指针。资源 ID 全部列在 Resource.h 中,它们与资源属性中设置的 ID 相匹配。

我是 MFC 的新手,所以我不完全确定我了解资源及其 ID 的工作方式,但在我看来,错误的指针表明我的资源没有存储在正确的位置内存?这是一个旧项目,我正在尝试向其添加新内容,当我尝试使用旧资源执行 MAKEINTRESOURCE 时,我检查了 anf(这些资源肯定有效,它们在我运行应用程序时显示并正常运行)我也变得很糟糕指针。

这可能是什么原因造成的?

编辑:该项目也在使用 unicode 字符集,如果这有什么区别的话

最佳答案

如果“坏指针”是指“不指向内存中资源对象的指针”,那么 MAKEINTRESOURCE() 工作正常。问题是,为了使用相同的函数参数传递字符串或整数 ID,Windows API 函数进行了一个奇怪的指针转换,该函数将其检测为“哦等等,这不是指针,它是资源 ID ".

这是记录在案的行为。例如,在 LoadBitmap() 的文档中,它说:

lpBitmapName [in]:

A pointer to a null-terminated string that contains the name of the bitmap resource to be loaded. Alternatively, this parameter can consist of the resource identifier in the low-order word and zero in the high-order word. The MAKEINTRESOURCE macro can be used to create this value.

通过重新解释任意整数值创建无效指针是合法的 C++ 构造,但取消引用无效指针是未定义的行为。

在这种情况下,接收参数的函数检查高位字是否为 0,如果是,则使用低位字作为整数并且永远不会取消引用指针。

注意:如果这感觉像是一个讨厌的黑客,那是因为它是一个讨厌的黑客。

关于c++ - MAKEINTRESOURCE 返回资源 ID 的错误指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9806100/

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