2010-02-24 8 views
0

Je porte une DLL écrite en C de WinCE 5.0 vers WinCE 6.0 sur une cible ARM. Cette DLL est appelée par un logiciel .NET. Sur WinCE5.0, tout va bien. Sur WinCE6, j'ai le problème suivant:Empiler la convention d'appel entre .NET et C sur WinCE 6.0

  • sur InitInstance() de ma DLL, je peux appeler quoi que ce soit sans problème (par exemple MessageBox()) ou utilise récursivité. Passé ce point, la DLL est appelée par le code .NET. Et puis il échoue: même les arguments passés par le code .NET semblent étranges. Je peux appeler MessageBox() une fois, mais je ne peux pas appeler une fonction qui appelle MessageBox() et qui s'appelle elle-même: la récursivité est brisée.

Il semble que le code .NET utilise la pile d'une manière différente de mon code C.

Je suis très peu familier avec le monde Windows et la société qui me donne l'application .NET ne comprend pas encore pourquoi il y a un tel échec.

N'importe quel pointeur/conseil/conseil est le bienvenu!

Merci!

+0

L'assemblage .Net est-il conçu pour le Compact Framework? Avez-vous les mêmes versions de ce cadre compact installé sur les deux appareils? –

Répondre

0

Eh bien, il semble que la convention d'appel a changé à un moment donné, entre une DLL compilée sur EV4/WinCE5 et appelée par un code .NET, et la même DLL compilée pour VS2008/WinCE6. Maintenant ma DLL reçoit un pointeur vers des caractères larges au lieu d'un objet ... La compilation conditionnelle a résolu mon problème alors que j'aurais aimé obtenir une 'vraie' explication de la part d'un doc officiel. Quoi qu'il en soit, l'affaire est réglée maintenant.