3

現在、ARM プロセッサである TI OMAP プロセッサで Windows CE 用のアプリケーションを開発しています。C# から C++ DLL ファイルの関数を単純に呼び出そうとしていますが、使用するデータ型に関係なく、常に値 0 が返されます。これは、何らかの呼び出し規約の不一致である可能性が最も高いですか? 同じ Visual Studio ソリューションから DLL とメイン EXE をコンパイルしています。

C# コード スニペット:

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 コード スニペット:

extern "C" __declspec (dllexport) unsigned char test_return() {
    return 95;
}
4

3 に答える 3

2

変更したときに機能しました:

extern "C" __declspec (dllexport) unsigned char test_return() {
    return 95;
}

extern "C" __declspec (dllexport) unsigned char __cdecl test_return() {
    return 95;
}

DLL コード内。WinCE用にコンパイルされたときにこれが想定されない理由は、私にはわかりません。

于 2009-07-02T22:53:11.570 に答える
0

次のように test_return() をエクスポートしてみてください。

unsigned char __declspec(dllexport) WINAPI test_return() {
   return 95;
}
于 2009-07-02T22:55:10.597 に答える
0

どこかで WINAPI が __stdcall として定義されていますが、__cdecl である必要があります

いいえ。WINAPI は __stdcall として定義されています。

于 2010-06-03T12:59:41.930 に答える