Question

Je développe actuellement une application pour Windows CE sur le processeur TI OMAP, qui est un processeur ARM. Je suis en train d'appeler simplement une fonction dans un fichier DLL C ++ de C # et je reçois toujours une valeur de 0 arrière, quel que soit le type de données que j'utilise. Est-ce le plus probable une sorte d'appeler non-concordance des congrès? Je compile la DLL et EXE principal de la même solution Visual Studio.

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;
}
Était-ce utile?

La solution

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 de DLL. Pourquoi il ne suppose pas lorsqu'il est compilé pour WinCE est au-delà de moi.

Autres conseils

Essayez l'exportation test_return () comme suit:

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

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

Non. WINAPI est défini comme __stdcall.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top