Cela ressemble beaucoup à trouver une aiguille dans une pile de foin, mais voilà.La corruption de la pile d'appel entre les frontières
Je construis une application Windows Mobile 6.1. Plus précisément, j'essaie de porter sur le OpenCV framework. Après avoir compilé avec succès (de manière douteuse) OpenCV pour l'architecture ARM4I, je l'ai essayé dans une simple application de style hello. De mon WinCE. EXE j'appelle une fonction stockée dans un .dll OpenCV (cxcore200.dll). L'appel simple ressemble à ceci.
IplImage *src = cvCreateImage(cvSize(320,240), 8, 1);
Des problèmes majeurs se posent lorsque je fais un pas en cvCreateImage. La signature de la méthode est la suivante:
IplImage * cvCreateImage(CvSize size, int depth, int channels){ ... }
Ainsi, lorsque je entre dans cette fonction, params profondeur et la taille sont égales à 320 et 240 respectivement (non 8 et 1 comme prévu).
Pour référence, CvSize est déclarée comme:
typedef struct
{
int width;
int height;
}
CvSize;
Ceci est clairement une sorte de corruption de pile d'appels qui a à voir avec le fait que je traverse les frontières dans une DLL peut-être pas correctement compilé.
La DLL et l'EXE compilent et lient sans erreur. Est-ce que quelqu'un a déjà vu quelque chose comme ça? Des idées sur la façon de déboguer cela?
Recompilation avec quelques drapeaux différents semble avoir résolu le problème. – alyx