2014-04-02 82 views
3

我該如何定義一個具有動態大小數組的結構體?將動態大小數組編組爲結構體

是嗎?

struct MyStruc { 

    public int len; 
    [MarshalAs(UnmanagedType.LPArray, SizeParamIndex=0)] 
    public int buf[]; 
} 
+0

什麼是 '動態大小的數組'?數組像「列表」? – user3449857

+0

你將不得不使它成爲'IntPtr'或者'不安全'(後者可能更容易讓事情正常工作)。 – leppie

+0

我不能使用列表,因爲在c + +大小的定義,如int * –

回答

3

假設你想要一個包含指向數組的指針的結構。

聲明指針數組作爲IntPtr並用Marshal.AllocHGlobal手動編組數組內容,Marshal.Copy

假設希望一個可變尺寸的結構,而不是包含指向數組的結構體。

您不能使用p/invoke編組變量大小的結構。您至少有以下兩種選擇:

  1. 將結構分解爲兩個參數。
  2. 元帥該結構與Marshal.AllocHGlobal手動,Marshal.Copy
+0

好吧,我明白了,但我不想用IntPtr在c#中工作:(但是我想,我沒有其他辦法。 –

+0

我的兩個假設中的哪一個是正確的。顯示C++聲明的類型會有幫助 –

+0

實際上,我使用的是dll,但我沒有dll代碼,但是我有dll的struct定義,像這樣定義:struct MyStruc {int_len; int buf [1]; } –