我在 D7 中创建了一个示例项目来演示这个奇怪的问题。它在这里: http ://speedy.sh/n9Etr/OpenCV-BugTest.zip
我有一个看起来像这样的程序:
function Rec (image: PIplImage): String;
begin
DLL_CALL;
end;
当我调用 Rec 时,我在 DLL_CALL 上得到了 AV,但是......如果我向函数添加第二个参数:
function Rec (image: PIplImage; Something: String): String;
begin
DLL_CALL;
end;
然后 DLL_CALL 成功。
变量:“某事”是无关紧要的,不会被带到任何地方......
真的,我不知道发生了什么……
编辑:
我使用 openCV 库的 cvSaveImage。
function cvSaveImage(const filename: PAnsiChar; const image: pointer): integer;
cdecl; external CV_HIGH_GUI_DLL;
我所有的方法都使用 cdecl 参数的调用约定导出。
完整的程序是:
function TCVR.Rec(image: PIplImage): String;
const
THRESH = 50;
var
imgDisorted: PIplImage;
Storage: PCvMemStorage;
Squares: PCvSeq;
begin
imgDisorted := nil;
result := '';
Storage := cvCreateMemStorage(0);
cvSetImageROI(image, cvRect(0, 0, image^.width and -2, image^.height and -2));
PyrDownUp(image);
cvSetImageROI(image, cvRect(0, 0, image^.width and -2, image^.height and -2));
imgDisorted := cvCreateImage(cvSize(image^.width and -2, image^.height and -2), 8, 1);
cvSaveImage('c:\test.jpg', image); <--- AV here only when I have 1 parameter in my Rec.
end;