【问题标题】:Pointer stored in int存储在 int 中的指针
【发布时间】:2012-04-27 14:02:27
【问题描述】:

我有返回 VARIANT (mfc) 的函数 getMemory()。 据说 ulVal 中的成员是指向我需要访问的内存的指针。

int m_memAddr = object.getMemory().ulVal; //get pointer to memory

然后我需要将这个指针放入 char* 我试过了

char* pointer = (char*)m_memAddr;

它可以编译,但程序运行时出现错误。 怎么调试?

函数getMemory:

VARIANT object::getMemory()
{
    VARIANT result;
    InvokeHelper(0x4a, DISPATCH_METHOD, VT_VARIANT, (void*)&result, NULL);
    return result;
}

//从我使用的相机库的文档中编辑:

变体 GetImageMem() 说明

GetImageMem() 返回指向存储图像的内部图像存储器的起始地址的指针。如果使用环形缓冲,GetImageMem() 会返回上次用于图像捕获的图像内存的起始地址。

指向图像内存的指针在 VARIANT 数据类型的元素 ulVal 中返回。 参数

返回值

指向 VARIANT 数据类型的 ulVal 中的图像内存。

这是返回我的相机存储图像的内存的函数的描述。

我想用 OpenCV 处理这个图像,所以我需要 char* 将其设置为 IplImage imageData。

现在我希望更清楚问题是什么。

【问题讨论】:

  • 什么错误?真的,问题是“如何调试它?”?
  • 调试时很高兴知道错误。
  • sizeof(int) 不一定等于 sizeof(char*),你的 int 可能不够大。
  • 在我的平台上,int 不足以容纳指针...
  • int 中存储指针有什么意义?还有另一种非常适合该任务的类型(我的意思是char*,当然)。

标签: c++ pointers mfc


【解决方案1】:

来自documentation

pbParamInfo - 指向以 null 结尾的字节字符串的指针,指定 pbParamInfo 后面的参数类型。

... - 参数的变量列表,在 pbParamInfo 中指定的类型。

您为pbParamInfo 传递了NULL,我认为这意味着返回的变量中不会存储任何数据,所以指针当然是无效的。

如果您进一步遵循文档,您会发现传递 VTS_BSTR 指定您可以使用指向字符的指针初始化变量(将其作为 pbParamInfo 之后的下一个参数传递)。

【讨论】:

  • 此功能来自相机经销商提供的示例。但感谢您的回答。我会检查 InvokeHelper(0x4a, DISPATCH_METHOD, VT_VARIANT, (void*)&result, (const BYTE*)(VTS_BSTR),m_imageData)
  • 问题出在其他东西上。 pbParamInfo 的 NULL 用于其他可选参数。 To variant 被返回 ul 并且在将值转换为 char 后我得到了正确的数据。
  • 我很高兴你把它整理好了。下次:如果您创建一个显示问题的small, self-contained compilable program,您可能会得到更好的答复:程序将有足够的上下文来帮助我们找出问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
相关资源
最近更新 更多