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。你說過漏洞,我仔細查看代碼並發現它。謝謝! –