C ++ DLL chamado do C # no Windows CE para ARM sempre retorna 0
-
21-08-2019 - |
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;
}
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.