[英]LARGE_INTEGER value gets changed while marshalling : from LARGE_INTEGER to UINT64 (C) to C#'s uint64
我试图通过ioctl将NdisGetCurrentSystemTime
结果编组到C#程序。
LARGE_INTEGER data;
NdisGetCurrentSystemTime (&data );
marshal_data->time = (UINT64)(data.QuadPart / 10^6);
DBGPRINT(("Time: %64u", marshal_data->time));
在C#接收器端,时间字段定义为uint64; 编组结构中还有两个其他uint64字段。 但是,当做
String.Format(("Time was {0}", recv_data->time))
我出乎意料的大数字不同于DBGPRINT中的数字。
C#:
[StructLayout(LayoutKind.Sequential)]
...
public UInt64 time
C:
struct _marshalme {
...
UINT64 time
...
}
字节顺序有什么奇怪的吗?
LARGE_INTEGER
表示一个64位带符号整数 。 我希望您的问题来自使用UInt64
而不是Int64
。
问题主要在于结构对齐不正确,因此大小不同。 但是由于某种原因,对于int32,int64情况(即使大小相同),似乎在传输时仍在破坏数据(例如,最后的DBGPRINT正确打印保存的值); 我被迫使用
long startTime;
long padding;
接收适当的值(如C#的长值),其他方式处理该值失败。 除非以后-否则,将在以后发布更多完成的示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.