回调参数被移位

时间:2013-10-21 15:23:50

标签: c++

我有一个视频c ++回调函数,其中参数在几个小时后突然转移。在调试中,它将断言:

void CCameraInstance::VideoCallback(void *pContext, unsigned char *pBuffer, long nWidth, long nHeight, long nFrameErrorNo)
{
   assert(nWidth < 4000);
   CCameraInstance *pThis = (CCameraInstance*)pContext;
   pThis->PaintFrame(pBuffer, nWidth, nHeight, nFrameErrorNo);
}

当调试器中断断言时,nWidth的值无效。但是,nHeight为320(宽度值),nFrameErrorNo为240(nHeight值)。

参数如何以这种方式转变?

1 个答案:

答案 0 :(得分:0)

移位可能是由隐藏的指针引起的。 http://www.learncpp.com/cpp-tutorial/8-8-the-hidden-this-pointer/

来自您在此处粘贴的代码

void CCameraInstance::VideoCallback(void *pContext, unsigned char *pBuffer, long nWidth, long nHeight, long nFrameErrorNo)

我可以看到回调函数是class CCameraInstance

的成员

我不确定您是将该功能定义为静态功能还是普通功能。但理论上它应该是一个静态函数来避免这个指针。 Using a C++ class member function as a C callback function

但是,即使我已将成员函数定义为static,我也遇到了C ++ / CLI问题。这个指针/句柄仍然存在。

我认为您可以尝试将您的功能定义为

void CCameraInstance::VideoCallback(CCameraInstance* test,void *pContext, unsigned char *pBuffer, long nWidth, long nHeight, long nFrameErrorNo)

并尝试。

如果您使用的是C ++ / CLI,那么它将是

void CCameraInstance::VideoCallback(CCameraInstance^ test,void *pContext, unsigned char *pBuffer, long nWidth, long nHeight, long nFrameErrorNo)