1
我有一个COM组件。此COM组件在屏幕上显示图像。图像位通过一个缓冲区复制这样的:StretchBlt失败
IplImage iplimage = image;
IplImage *img2 = cvCreateImage(cvGetSize(&iplimage),
iplimage.depth,
iplimage.nChannels);
cvCopy(&iplimage, img2);
memcpy(m_BackSurface.vpBits, img2->imageData, img2->width*img2->height*3);
凡image
是CV ::垫。在某些情况下,这是一个裁剪cv :: Mat,即。 raw_image(x0, y0, w, h)
返回raw_image
是另一个cv :: Mat。
后来应用程序调用StretchBlt
来显示图像。
如果我运行的.NET应用程序内该COM组件(和仅当.NET应用程序中,这并不在一个纯粹的非托管环境中发生)调用StretchBlt
失败时(同样,只有当)image
已被裁剪。它在图像未被裁剪的代码路径上不会失败。两个代码路径的绘图代码都是相同的。 GetLastError()
将返回错误8.
有人可以解释这个问题吗?
Dario,谢谢。实际上,我没有签名int,它被大于自身的签名值减去后溢出,将垃圾数据提供给StretchBlt。你说过漏洞,我仔细查看代码并发现它。谢谢! –