2011-10-31 72 views
9

我需要幫助,使這種轉換:如何將(託管到非託管)數組<System :: Byte ^>轉換爲字節*?

byte* bytes = Battle::Storm::GetBytes(0); 

現在我得到的錯誤:

Error 3 error C2440: 'initializing' : cannot convert from 'cli::array ^' to 'byte *'

我怎樣才能做到這一點?

+0

你想將它轉換爲本地'字節(無符號字符)'指針或管理的字節數組是'陣列 ^'? –

+0

我想將它轉換爲本地字節或char * – Cynede

回答

15

從錯誤消息,據我所知,Battle::Storm::GetBytes(0);返回一個多維數組,這是在cli::array<Byte,dimension> ^

的形式將其轉換爲原生unsigned char*

array<Byte,N>^byteMultiArray = Battle::Storm::GetBytes(0); 
pin_ptr<unsigned char> array_pin = &byteArray[0, ... ,Nth 0]; 
unsigned char * nativeArray = array_pin; 

這裏的數字N是數組的維數。

//for N = 2 
pin_ptr<unsigned char> array_pin = &byteArray[0,0]; 
//for N = 4 
pin_ptr<unsigned char> array_pin = &byteArray[0,0,0,0]; 
+1

這對於多維數組 – Valery

+1

與N 1它的工作更正確:)謝謝,我只是很混淆C++ CLI語法。 – Cynede

10

您可以使用pin_ptr <>獲得非託管陣列

array<Byte>^ arr = gcnew array<Byte>(100) ; 
pin_ptr<unsigned char> pUnmanagedArr = &arr[0]; 
+0

源數組是多維的。這是不正確的。 –

+0

更正確的是:array ^arr = Battle :: Storm :: GetBytes(0);但我得到錯誤:錯誤錯誤C2440:'初始化':無法從'cli :: array ^'轉換爲'cli :: array ^'並在下一行:錯誤錯誤C2440:'初始化':無法從'cli :: interior_ptr '轉換爲'cli :: pin_ptr ' – Cynede

+0

@nCdy:「Battle :: Storm :: GetBytes(0)」的確切返回類型是什麼? –

相關問題