Pregunta

Actualmente estoy desarrollando una aplicación para Windows CE en el procesador TI OMAP, que es un procesador ARM. Estoy intentando simplemente llamar a una función en un archivo DLL de C ++ C # y siempre consigo un valor de 0 espalda, no importa qué tipo de datos que utilizo. Es esto lo más probable algún tipo de desajuste llamando convención? Estoy compilando el archivo DLL y EXE principal de la misma solución de Visual Studio.

C # Fragmento de código:

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 Fragmento de código:

extern "C" __declspec (dllexport) unsigned char test_return() {
    return 95;
}
¿Fue útil?

Solución

Se trabajó cuando cambié:

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

a

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

En el código DLL. ¿Por qué no se asume esta vez recopilados para WinCE está más allá de mí.

Otros consejos

Trate de exportación test_return () de la siguiente manera:

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

En algún lugar WINAPI se define como   __stdcall donde debería haber sido __cdecl

No. WINAPI se define como __stdcall.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top