我目前正在开发用于TI OMAP处理器,这是ARM处理器在Windows CE的应用程序。我想简单地调用从C#中的C ++ DLL文件中的函数,我总是得到0值回来了,不管我用的数据类型。这是最有可能的某种调用约定不匹配?我编译DLL和从相同的Visual Studio解决方案的主要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;
}
有帮助吗?

解决方案

它工作时,我改变:

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

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

在该DLL的代码。为什么编译WinCE的,当它不认为这是超越我。

其他提示

尝试导出test_return()如下:

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

某处WINAPI被定义为   __stdcall它应该已经__cdecl

没有。 WINAPI被定义为__stdcall。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top