C++ - DLL Aufruf Von C# auf Windows CE für ARM Gibt Immer 0 zurück
-
21-08-2019 - |
Frage
Ich bin derzeit auf der Entwicklung von Anwendungen für Windows CE auf dem TI OMAP-Prozessor, der einen ARM-Prozessor.Ich versuche, rufen Sie einfach eine Funktion in einer C++ - DLL-Datei von C# und ich bekomme immer den Wert 0 zurück, egal in welchem Datentyp ich verwenden.Ist dies höchstwahrscheinlich eine Art der Aufrufkonvention mismatch?Ich bin kompilieren Sie die DLL und die Haupt-EXE-Datei aus derselben Visual Studio-Lösung.
C# - Code-Snippet:
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-Code-Snippet:
extern "C" __declspec (dllexport) unsigned char test_return() {
return 95;
}
Lösung
Es funktionierte, wenn ich geändert:
extern "C" __declspec (dllexport) unsigned char test_return() {
return 95;
}
zu
extern "C" __declspec (dllexport) unsigned char __cdecl test_return() {
return 95;
}
In der DLL-code.Warum nicht davon ausgehen, das beim kompilieren für WinCE ist mir schleierhaft.
Andere Tipps
Versuchen Sie exportieren test_return() wie folgt:
unsigned char __declspec(dllexport) WINAPI test_return() {
return 95;
}
Irgendwo WINAPI definiert als __stdcall, wo es hätte sein sollen, __cdecl
Nein.WINAPI ist definiert als __stdcall.