C++ 在 Windows CE for ARM 上从 C# 调用的 DLL 始终返回 0

发布于 2024-07-25 15:03:25 字数 645 浏览 2 评论 0原文

我目前正在 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;
}

I am currently developing an application for Windows CE on the TI OMAP processor, which is an ARM processor. I am trying to simply call a function in a C++ DLL file from C# and I always get a value of 0 back, no matter which data type I use. Is this most likely some kind of calling convention mismatch? I am compiling the DLL and the main EXE from the same Visual Studio solution.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

丶情人眼里出诗心の 2024-08-01 15:03:25

当我将:更改

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

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

DLL 代码中时,它起作用了。 为什么在为 WinCE 编译时它不假设这一点超出了我的范围。

It worked when I changed:

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

to

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

In the DLL code. Why it doesn't assume this when compiled for WinCE is beyond me.

信仰 2024-08-01 15:03:25

尝试导出 test_return() 如下:

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

Try exporting test_return() as follows:

unsigned char __declspec(dllexport) WINAPI test_return() {
   return 95;
}
暗地喜欢 2024-08-01 15:03:25

某处 WINAPI 被定义为
__stdcall 应该是 __cdecl

否。WINAPI 被定义为 __stdcall。

Somewhere WINAPI is being defined as
__stdcall where it should have been __cdecl

No. WINAPI is defined as __stdcall.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文