在C#中使用C / C ++库的方法返回一个随机值,而不是上面的返回

时间:2015-08-28 11:02:07

标签: c# c++ c

当我将函数从C ++ DLL调用到C#时,它会返回一个随机值,例如:

  

17700591018967041

Source.cpp (我在C#应用程序中使用的DLL C ++的一部分):

extern "C"
{
    __declspec(dllexport) uLong ZEXPORT Source()
    {
        return 1;
    }
}

Program.cs (C#应用程序):

...Declaration class...

    [DllImport("dll_adler32.dll", CallingConvention=CallingConvention.Cdecl)]
    public static extern ulong Source();

    static void Main()
    {
          ulong t1;
          t1 = Source(); // returns a random value
    }

1 个答案:

答案 0 :(得分:4)

在您的C ++代码中,uLong为32位,而C#中的ulong为64位。所以Source只会写32位,但C#会读64位。十六进制中的177005910189670410x3EE298 00000001。低32位是1返回的Source值,高32位是C#读取的随机数据。将您的p / Invoke定义更改为:

[DllImport("dll_adler32.dll", CallingConvention=CallingConvention.Cdecl)]
public static extern uint Source();