Domanda

Attualmente sto sviluppando un'applicazione per Windows CE sul processore TI OMAP, che è un processore ARM. Sto cercando di chiamare semplicemente una funzione in un file C ++ DLL da C # e ottengo sempre un valore pari a 0 torna, non importa quale tipo di dati che uso. È questo molto probabilmente un qualche tipo di chiamate non corrispondente convenzione? Sto compilazione del DLL e EXE il principale dalla stessa soluzione Visual Studio.

C # frammento di codice:

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 Snippet di codice:

extern "C" __declspec (dllexport) unsigned char test_return() {
    return 95;
}
È stato utile?

Soluzione

Ha funzionato quando ho cambiato:

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

a

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

Nel codice DLL. Perché non si assume questo quando compilato per WinCE è oltre me.

Altri suggerimenti

Provare a esportare test_return () come segue:

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

Da qualche parte WINAPI viene definito come   __stdcall in cui avrebbe dovuto essere __cdecl

No. WINAPI è definito come __stdcall.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top