Int值不在托管代码和非托管代码之间正确编组

时间:2012-03-21 13:29:55

标签: .net interop

我尝试编写一个简单的函数来从托管代码中调用非托管代码。数据类型是int(这应该使它更简单)。功能就是这个

extern "C" MYTEST_API int myTestFunction(int a, int b)
{
    return a*b;
}

托管代码看起来像

    [DllImport("myTest.dll", CallingConvention = CallingConvention.Cdecl)]
    private static extern int myTestFunction(int a, int b);
...
    int p1 = 2;
    int p2 = 3;
    int result = myTestFunction(p1, p2);
    Console.WriteLine("C++ int: " + result);

当我运行程序时,结果返回为

C++ int: 12977616

所以,我不知道我如何声明或传递int参数有什么问题。我尝试将参数传递为“单个”,并且该版本有效。

1 个答案:

答案 0 :(得分:0)

想想它必须是简单而无关的东西才能解决这个问题...... 即使内容被指定为“始终复制”,C ++ .dll也没有在Visual Studio中更新。因此,它使用int C#参数调用C ++代码的“float”版本。手动刷新东西让它发挥作用。