我有一个视频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值)。
参数如何以这种方式转变?
答案 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)