2011-10-31 8 views
9

Potrzebuję pomocy, aby dokonać takiej konwersji:Jak przekonwertować (zarządzany na niezarządzany) tablicę <System :: Byte ^> na bajt *?

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

Teraz pojawia się błąd:

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

Jak mogę to zrobić?

+0

Czy chcesz przekonwertować go do rodzimej 'bajt (unsigned char)' wskaźnik lub zarządzany tablicę bajtów, która jest ''^tablica ? –

+0

Chcę przekonwertować go na macierzysty bajt lub znak * – Cynede

Odpowiedz

15

z komunikatu o błędzie Rozumiem, że Battle::Storm::GetBytes(0); zwraca multi tablicę wymiarową, która jest w postaci cli::array<Byte,dimension> ^

aby przekształcić go natywny 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; 

Tutaj liczba N jest wymiarem tablicy.

//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

To jest bardziej poprawne dla wielowymiarowej tablicy – Valery

+1

z N 1 działa :) Dziękuję, byłem po prostu tak mylić ze składnią CLI języka C++. – Cynede

10

Można użyć pin_ptr <>, aby uzyskać niezarządzalny tablicę

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

Tablica źródłowa jest wielowymiarowa. To nie jest poprawne. –

+0

bardziej poprawne jest: array ^arr = Battle :: Storm :: GetBytes (0); ale pojawia się błąd: Błąd błąd C2440: "inicjowanie": nie można przekonwertować z 'cli :: array ^' do 'cli :: array ^' i w następnej linii: Błąd error C2440: 'initializing': nie można przekonwertować z 'cli :: interior_ptr ' na 'cli :: pin_ptr ' – Cynede

+0

@nCdy: Jaki jest dokładny typ zwrotu 'Battle :: Storm :: GetBytes (0)'? –

Powiązane problemy