3

我目前正在 TI OMAP 处理器(一个 ARM 处理器)上为 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 回答