Pergunta

Atualmente, estou desenvolvendo uma aplicação para Windows CE no processador TI OMAP, que é um processador ARM. Eu estou tentando simplesmente chamar uma função em um arquivo C ++ DLL de C # e eu sempre obter um valor de 0 para trás, não importa qual o tipo de dados que eu uso. É este provavelmente algum tipo de chamar incompatibilidade convenção? Estou compilando a DLL eo principal EXE a partir da mesma solução Visual Studio.

C # trecho 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 trecho de código:

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

Solução

Ele trabalhou quando eu mudei:

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

para

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

No código DLL. Por que não assumir isso quando compilado para WinCE é além de mim.

Outras dicas

Tente test_return exportação () da seguinte forma:

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

Em algum lugar WINAPI está sendo definido como __stdcall onde deveria ter sido __cdecl

No. WINAPI é definido como __stdcall.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top