我尝试通过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
...
}
字节顺序有什么奇怪之处吗?
答案 0 :(得分:0)
LARGE_INTEGER
代表64-bit signed integer。我希望您的问题来自使用UInt64
而不是Int64
。
答案 1 :(得分:0)
问题主要在于不正确的结构对齐,因此大小不同;但由于某种原因,即使大小相同,它仍然会在转移时保持数据传输(例如,最后DBGPRINT正确打印保存的值)为int32,int64情况;我被迫使用
long startTime;
long padding;
接收适当的价值,因为C#很长,其他的编组方式失败了。将在稍后发布更多完整的样本,除非 - 问题已关闭。