C++ 在 Windows CE for ARM 上从 C# 调用的 DLL 始终返回 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
当我将:更改
为
DLL 代码中时,它起作用了。 为什么在为 WinCE 编译时它不假设这一点超出了我的范围。
It worked when I changed:
to
In the DLL code. Why it doesn't assume this when compiled for WinCE is beyond me.
尝试导出 test_return() 如下:
Try exporting test_return() as follows:
否。WINAPI 被定义为 __stdcall。
No. WINAPI is defined as __stdcall.