2010-02-26 6 views
0

J'ai une solution Windows Mobile qui contient deux projets. Un écrit en C# et un autre en C++ (code non-masqué qui se compile en dll). La partie écrite en C# appelle certaines fonctions C++ de dll pour se connecter à un serveur.Windows Mobile native exception C#/C++

Si j'ouvre mon application et que je me connecte au serveur tout fonctionne bien. Si je le minimise, ou si j'ouvre une autre application Windows Mobile sur mon application et que j'essaie à nouveau de me connecter au serveur, cela échoue avec un code d'exception natif. (Code d'exception: 0xc000001d.)

Une idée de ce qui arrive à mon code natif quand je minimise mon application? Pourquoi ça ne marche plus? L'erreur apparaît à la fois sur l'émulateur et le périphérique cible. J'utilise Windows 6.1 Professional et CF 3.5

Répondre

1

Code d'exception 0xc000001d est STATUS_ILLEGAL_INSTRUCTION. C'est à dire. le code a essayé d'exécuter une instruction qui n'appartient pas à l'ensemble d'instructions du processeur.

Cela pourrait être à cause de plusieurs raisons:

  • corruption de pile (à cause de débordement dans les tableaux)
  • dll/binaire corrompu

Voir le code qui gère les changements d'état de la fenêtre (minimiser/agrandir/restaurer). Voir si des appels à des fonctions telles que memcpy, strcpy, etc. sont entrés. Ce sont des fonctions non sécurisées pour lesquelles secure equivalents sont disponibles avec un suffixe _s. Vérifiez si une manipulation de pointeur/tableau brut écrit au-delà de ses limites pour provoquer un stack corruption. Vérifiez également l'intégrité de la DLL, si vous êtes sûr que c'est à cause du code dans la DLL.

Edit:

Si vous avez la source de DLL avec vous, construire avec la génération de fichiers de carte ON (Linker Param: /MAPINFO:EXPORTS). Et quand l'exception est levée, vous aurez généralement une adresse à l'intérieur du binaire où se produit le crash; cela peut être recherché dans le fichier map, pour connaître la fonction exacte où il se bloque (c'est une corruption de pile, la fonction exacte n'aidera qu'un peu, mais cela donnera le voisinage de la corruption). Voir this article pour plus de détails.