C ++ DLL chiamato da C # su Windows CE per ARM sempre restituisce 0
-
21-08-2019 - |
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;
}
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.