MAKEINTRESOURCE返回资源ID的坏指针

时间:2012-03-21 13:58:27

标签: c++ pointers mfc

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

我是MFC的新手,所以我不完全确定我了解资源和资源。他们的ID工作,但在我看来,坏指针表明我的资源没有存储在内存中的正确位置?这是一个旧项目,我正在尝试添加一些新东西,当我尝试用旧资源做MAKEINTRESOURCE时,我检查了anf(这肯定有效,它们出现并在我运行应用程序时起作用)我也变坏了指针。

导致这种情况的原因是什么?

编辑:项目也在使用unicode字符集,如果这有任何区别

1 个答案:

答案 0 :(得分:2)

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

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

  

lpBitmapName [in]:

     

指向以null结尾的字符串的指针,该字符串包含要位图资源的名称   加载。或者,此参数可以包含中的资源标识符   低位字和高位字中的零。可以使用MAKEINTRESOURCE宏   创造这个价值。

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

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

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