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