繁体   English   中英

编组时LARGE_INTEGER值被更改:从LARGE_INTEGER到UINT64(C)到C#的uint64

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM