簡體   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