当我将函数从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
}
答案 0 :(得分:4)
在您的C ++代码中,uLong
为32位,而C#中的ulong
为64位。所以Source
只会写32位,但C#会读64位。十六进制中的17700591018967041
是0x3EE298 00000001
。低32位是1
返回的Source
值,高32位是C#读取的随机数据。将您的p / Invoke定义更改为:
[DllImport("dll_adler32.dll", CallingConvention=CallingConvention.Cdecl)]
public static extern uint Source();