2011-10-31 13 views
9

que necesitan ayuda para realizar dicha conversión:Cómo convertir una matriz (gestionada a no gestionada) <System :: Byte ^> a byte *?

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

Ahora me sale el error:

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

¿Cómo puedo hacer esto?

+0

¿Quieres convertirlo en bytes nativo '(unsigned char)' puntero o matriz de bytes que es administrado array ''^? –

+0

Quiero convertirlo a byte nativo o char * – Cynede

Respuesta

15

Desde el mensaje de error entiendo que Battle::Storm::GetBytes(0); devuelve una matriz multidimensional, que es en forma de cli::array<Byte,dimension> ^

Para convertirla en nativo 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; 

aquí el número N es la dimensión de la matriz.

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

Esto es más correcto para la matriz multidimensional – Valery

+1

con N 1 funciona :) Gracias, estaba tan confundido con la sintaxis de la CLI de C++. – Cynede

10

Puede utilizar pin_ptr <> para obtener matriz no administrado

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

La matriz fuente es multidimensional. Esto no es correcto. –

+0

más correcto es: array ^arr = Battle :: Storm :: GetBytes (0); pero obtengo el error: Error error C2440: 'inicializando': no ​​se puede convertir de 'cli :: array ^' a 'cli :: array ^' y en la siguiente línea: Error error C2440: 'inicializando': no ​​se puede convertir de 'cli :: interior_ptr ' a 'cli :: pin_ptr ' – Cynede

+0

@nCdy: ¿Cuál es el tipo de devolución exacto de 'Battle :: Storm :: GetBytes (0)'? –