我正在爲託管C++包裝器處理非託管C++代碼並且有一個問題。 只是爲了簡單,讓我們說我需要從C#代碼傳遞二維數組到託管C++到非託管C++。我對1D陣列沒有問題,但堅持2D版本。可以將它轉換爲1D,但我想看看是否有其他方法。將二維數組從託管C++傳遞到非託管C++
爲了簡單起見,假設我想使用中間包裝將二維數組發送到非託管代碼並更改其值。
所以這裏是C#代碼到託管C++的電話:
MNumeric wrapper = new MNumeric(); //managed C++ object
int[,] dArr = new int[10, 10];
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
dArr[i, j] = 10;
}
}
wrapper.ChangeArray(dArr, Convert.ToInt32(Math.Sqrt(dArr.Length)))
託管C++:
void MNumeric::ChangeArray(cli::array<int,2> ^arr, int mySize)
{
//some code to call Unmanaged C++ passing managed 2D array ???
}
非託管C++
void UNumeric::ChangeArray(int** arr, int mySize)
{
for(int i=0;i<mySize;i++)
{
for(int j=0;j<mySize;j++)
{
arr[i][j]=i;
}
}
}
非常感謝你的幫助。
看起來像我修復一個錯誤,但得到了另一個。我的C++託管代碼現在看起來像這樣。
void MNumeric::ChangeArray(cli::array<int,2> ^arr, int mySize)
{
pin_ptr<int> p_arr = &arr[0,0];
u_num->ChangeArray((int**)p_arr, mySize);
}
其中u_num只是指向UNumeric類的指針。 我現在得到的錯誤如下:
試圖讀取或寫入受保護的內存。這通常表明其他內存已損壞。
任何想法讚賞。
你的問題是什麼?你怎麼能這樣做?這可能嗎?上述所有的? – RLH 2011-06-15 15:43:05
我認爲這可以做到,所以問題是如何做到這一點。 – ilyaw77 2011-06-15 16:08:36