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;
}
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top