2009-07-02 10 views
3

Ich entwickle gerade eine Anwendung für Windows CE auf dem TI OMAP-Prozessor, der ein ARM-Prozessor ist. Ich versuche, einfach eine Funktion in einer C++ - DLL-Datei von C# aufzurufen, und ich bekomme immer einen Wert von 0 zurück, egal welchen Datentyp ich verwende. Ist das höchstwahrscheinlich eine Art Conversion-Mismatch? Ich kompiliere die DLL und die Haupt-EXE von derselben Visual Studio-Lösung.C++ - DLL, die von C# unter Windows CE für ARM aufgerufen wird, gibt immer 0 zurück

C# Codeschnipsel:

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; 
} 
+0

Nur auf Windows Mobile 2005 R2 Emulator getestet und funktioniert perfekt. –

Antwort

2

Es funktionierte, als 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; 
} 

Im DLL-Code. Warum es das nicht annimmt, wenn es für WinCE kompiliert wird, ist jenseits von mir.

+0

Ben: Wahrscheinlich ist das ein Problem mit den Projekteinstellungen. Die standardmäßigen VS2008 Windows Mobile-Projekteinstellungen funktionierten für mich. –

0

Versuchen ausführenden test_return() wie folgt:

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

Irgendwo wird WINAPI als __stdcall definiert, wo es hätte sein sollen __cdecl –

0

Irgendwo WINAPI als __stdcall definiert wird, wo es sein sollte __cdecl

No. WINAPI als __stdcall definiert ist.

+1

Dies sollte ein Kommentar unter Bens Kommentar sein, keine neue Antwort. – ctacke

Verwandte Themen