我遇到的问题是,每当我传递MFC资源ID时,MAKEINTRESOURCE宏似乎总是返回一个错误的指针。资源ID都列在Resource.h中,它们与资源属性中ID的设置相匹配。
我是MFC的新手,所以我不完全确定我了解资源和资源。他们的ID工作,但在我看来,坏指针表明我的资源没有存储在内存中的正确位置?这是一个旧项目,我正在尝试添加一些新东西,当我尝试用旧资源做MAKEINTRESOURCE时,我检查了anf(这肯定有效,它们出现并在我运行应用程序时起作用)我也变坏了指针。
导致这种情况的原因是什么?
编辑:项目也在使用unicode字符集,如果这有任何区别
答案 0 :(得分:2)
如果“坏指针”指的是“指向内存中资源对象的指针”,则MAKEINTRESOURCE()
正常工作。问题是,为了使用相同的函数参数传递字符串或整数ID,Windows API函数进行奇怪的指针转换,该函数将其检测为“哦等待,这不是指针,它是资源ID ”
这是记录在案的行为。例如,在LoadBitmap()
的文档中,它说:
lpBitmapName [in]:
指向以null结尾的字符串的指针,该字符串包含要位图资源的名称 加载。或者,此参数可以包含中的资源标识符 低位字和高位字中的零。可以使用MAKEINTRESOURCE宏 创造这个价值。
通过重新解释任意整数值来创建无效指针是合法的C ++构造,但是取消引用无效指针是未定义的行为。
在这种情况下,接收参数的函数检查高阶字是否为0,如果是,则使用低阶字作为整数,并且从不取消引用指针。
注意:如果这感觉像是讨厌的黑客,那是因为 是一个讨厌的黑客。