簡體   English   中英

如何在C#中從指向ULONG數組的指針中檢索值

[英]how to retrieve values from pointer to array of ULONG in C#

C ++中的結構:

typedef struct _denom 
    { 
     CHAR       cCurrencyID[3]; 
     int       ulAmount; 
     short     usCount; 
     LPULONG    lpulValues; //pointer to array of ULONGS 
     int      ulCashBox;        
    } DENOMINAT, * LPDENOMINAT; 

C#中的結構:

[ StructLayout( LayoutKind.Sequential, 
CharSet=CharSet.Ansi, Pack=1 ) ] 
 public struct  DENOMINAT 
 { 
   [ MarshalAs( UnmanagedType.ByValArray, SizeConst=3 ) ] 
  public char[] cCurrencyID; 
  public int ulAmount; 
  public short usCount; 
  public IntPtr lpulValues; 
  public int ulCashBox;     
} 

lpulValues是指向ulong數組的指針,其數組大小基於usCount ,例如:如果uscount為5,則在C ++中將為lpulValues = new ULONG[usCount];

我可以很容易地在C ++中獲得數組值,而這在C#中是不可能的。我不理解如何通過IntPtr獲取數組值。 提前致謝。

重要的事情

在Windows中,在C / C ++中, sizeof(long) == sizeof(int) 所以sizeof(C-long) == sizeof(C#-int) 參見https://stackoverflow.com/a/9689080/613130

您應該能夠:

var denominat = new DENOMINAT();

var uints = new uint[denominat.usCount];
Marshal.Copy(denominat.lpulValues, (int[])(Array)uints, 0, uints.Length);

請注意,我們作弊了一點,將uint[]轉換為int[] ,但這是合法的,因為它們僅在符號上有所不同(請參閱https://stackoverflow.com/a/593799/613130

我認為您不能使用.NET PInvoke封送拆收器自動執行此操作。

要顯示數組:

for (int i = 0; i < uints.Length; i++)
{
    Console.WriteLine(uints[i]);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM