0

这感觉很像在干草堆中找到一根针,但是就这样。

我正在构建一个 Windows Mobile 6.1 应用程序。具体来说,我正在尝试移植OpenCV 框架。在为 ARM4I 架构成功(怀疑地)编译 OpenCV 之后,我正在一个简单的 hello world 风格的应用程序中尝试它。

在我的 WinCE .EXE 中,我正在调用存储在 OpenCV .DLL (cxcore200.dll) 中的函数。简单的调用如下所示。

IplImage *src = cvCreateImage(cvSize(320,240), 8, 1);

当我进入 cvCreateImage 时会出现主要问题。方法签名是:

IplImage * cvCreateImage( CvSize size, int depth, int channels ){ ... }

所以当我进入这个函数时,深度和大小参数分别等于 320 和 240(不是预期的 8 和 1)。

作为参考,CvSize 声明为:

typedef struct
{
    int width;
    int height;
}
CvSize;

这显然是某种调用堆栈损坏,这与我跨越边界进入可能错误编译的 DLL 的事实有关。

DLL 和 EXE 编译和链接都没有错误。有没有人见过这样的事情?关于如何调试的任何想法?

4

2 回答 2

0

我不熟悉您的特定环境,但我建议您仔细检查以确保您在调用cvCreateImage. 请参阅以获取参考资料。

例如,VC++ 中的默认 C++ 调用约定是“thiscall”,但可能cvCreateImage需要__stdcall__cdecl__fastcall.

于 2009-10-06T21:47:05.340 回答
0

当我不得不调试这个(15 年前,Win16)时,我使用了反汇编。读起来并不简单,但它清楚地表明了正在发生的事情。

于 2009-10-07T11:55:09.740 回答