2014-11-06 37 views
1

我有一些調用C#委託作爲回調的本機C/C++代碼。傳遞動態數組參數的最佳做法是什麼?實際上,C指針是struct的數據成員,我將結構傳遞給回調函數。編組動態數組到C#委託(回調)

使用IntPtr做類似的事情可以嗎?

struct Data { 
    ... (other data members) 
    double* array; 
    int size; 
}; 

陣列是一個指針,指向在我的C++代碼(只是爲了newmalloc呼叫)分配的數組。在C#方委託期望

struct Data { 
    ... (other data members) 
    IntPtr array; 
    int size; 
} 

我擔心的是...應該IntPtr使用Marshal.AllocHGlobal被分配的內存或者是它也是安全的,如果它在我的C++代碼(newmalloc)內存分配?

回答

3

使用IntPtr是正確的。內存被分配,並在非託管端釋放。因此,您應該在託管端做與分配和釋放相關的任何操作。

使用Marshal.Copy只讀取或寫入陣列。或者,如果您願意使用unsafe區塊並將IntPtr解釋爲double*