2009-07-02 8 views
3

Je développe actuellement une application pour Windows CE sur le processeur TI OMAP, qui est un processeur ARM. J'essaye simplement d'appeler une fonction dans un fichier DLL C++ de C# et j'ai toujours une valeur de 0, quel que soit le type de données que j'utilise. Est-ce probablement une sorte de désaccord de convention d'appel? Je compile la DLL et l'EXE principal à partir de la même solution Visual Studio.C++ DLL appelée à partir de C# sur Windows CE pour ARM Toujours renvoie 0

C# Code Snippet:

public partial class Form1 : Form 
{ 
    private void button1_Click(object sender, EventArgs e) 
    { 
     byte test = LibWrap.test_return(); 
     MessageBox.Show(test.ToString()); 
    } 
} 

public class LibWrap 
{ 
    [DllImport("Test_CE.dll")] 
    public static extern byte test_return(); 
} 

C++ DLL Code Snippet:

extern "C" __declspec (dllexport) unsigned char test_return() { 
    return 95; 
} 
+0

Juste testé sur l'émulateur Windows Mobile 2005 R2 et fonctionne parfaitement. –

Répondre

2

Il a travaillé quand j'ai changé:

extern "C" __declspec (dllexport) unsigned char test_return() { 
    return 95; 
} 

à

extern "C" __declspec (dllexport) unsigned char __cdecl test_return() { 
    return 95; 
} 

Dans le code DLL. Pourquoi cela ne suppose pas cela quand compilé pour WinCE est au-delà de moi.

+0

Ben: C'est probablement un problème lié aux paramètres du projet. Les paramètres de projet VS2008 Windows Mobile par défaut ont bien fonctionné pour moi. –

0

Essayez exportation test_return() comme suit:

unsigned char __declspec(dllexport) WINAPI test_return() { 
    return 95; 
} 
+1

Quelque part WINAPI est défini comme __stdcall où il aurait dû être __cdecl –

0

Quelque part WINAPI est définie comme __stdcall où il aurait dû être __cdecl

n ° WINAPI est défini comme __stdcall.

+1

cela devrait être un commentaire ci-dessous le commentaire de Ben, pas une nouvelle réponse. – ctacke

Questions connexes