采用C/C++;C#中的库返回一个随机值,而不是上述值 当从C++ DLL调用函数到C++时,它返回一个随机值,例如:

采用C/C++;C#中的库返回一个随机值,而不是上述值 当从C++ DLL调用函数到C++时,它返回一个随机值,例如:,c#,c++,c,C#,C++,C,17700591018967041 源.CPP(我在C语言应用中使用的DLL C++的一部分):< /P> 程序.cs(C#应用程序): 你的C++代码中, ULUN 为32位,而C代码中的 ULUN 为64位。因此Source将只写入32位,而C#将读取64位17700591018967041为0x3EE2980000000001。低32位是Source返回的1值,高32位是C#碰巧读取的任意随机数据。将p/Invoke定义更改为: [DllImport("dll_adler32.dll",

17700591018967041

<强>源.CPP(我在C语言应用中使用的DLL C++的一部分):< /P> 程序.cs(C#应用程序):


<>你的C++代码中,<代码> ULUN <代码>为32位,而C代码中的<代码> ULUN <代码>为64位。因此
Source
将只写入32位,而C#将读取64位<十六进制代码>17700591018967041为
0x3EE2980000000001
。低32位是
Source
返回的
1
值,高32位是C#碰巧读取的任意随机数据。将p/Invoke定义更改为:

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

<>你的C++代码中,<代码> ULUN <代码>为32位,而C代码中的<代码> ULUN <代码>为64位。因此
Source
将只写入32位,而C#将读取64位<十六进制代码>17700591018967041为
0x3EE2980000000001
。低32位是
Source
返回的
1
值,高32位是C#碰巧读取的任意随机数据。将p/Invoke定义更改为:

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

你的问题是什么?这很奇怪,因为
Source()
不接受参数。有隐藏在某处的超控装置吗…?托马斯,我修好了,谢谢。问题是:为什么返回随机数,当C中的1 ULUN是64位,C和C++中,除非TyPulf被声明为“长长”,是32位。还要明确你的通话约定。阿德里亚诺·雷佩蒂,谢谢。它起作用了。我把它改为uInt。你的问题是什么?这很奇怪,因为
Source()
不接受参数。有隐藏在某处的超控装置吗…?托马斯,我修好了,谢谢。问题是:为什么返回随机数,当C中的1 ULUN是64位,C和C++中,除非TyPulf被声明为“长长”,是32位。还要明确你的通话约定。阿德里亚诺·雷佩蒂,谢谢。它起作用了。我把它改为uInt,这说明了为什么你更喜欢十六进制而不是十进制。一旦您意识到
0x3EE298 00000001
不是完全随机的,但前32位是随机的,那么解决方案就显而易见了。这说明了为什么您应该更喜欢十六进制而不是十进制。一旦您意识到
0x3EE298 00000001
不是完全随机的,但前32位是随机的,解决方案就显而易见了。
[DllImport("dll_adler32.dll", CallingConvention=CallingConvention.Cdecl)]
public static extern uint Source();