2011-10-31 41 views
9

tôi cần sự giúp đỡ để thực hiện chuyển đổi như:Làm thế nào để chuyển đổi (quản lý để không quản lý) mảng <Hệ thống :: Byte ^> để byte *?

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

Bây giờ tôi nhận được lỗi:

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

Làm thế nào tôi có thể làm điều này?

+0

Bạn có muốn chuyển đổi nó thành con trỏ 'byte (unsigned char)' hoặc mảng byte được quản lý là 'mảng ^'? –

+0

Tôi muốn chuyển đổi nó thành byte gốc hoặc char * – Cynede

Trả lời

15

Từ thông báo lỗi Tôi hiểu rằng Battle::Storm::GetBytes(0); trả về một mảng đa chiều, mà là ở dạng cli::array<Byte,dimension> ^

Để chuyển nó sang native 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; 

Đây là số N là thứ nguyên của mảng.

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

Điều này đúng hơn đối với mảng đa chiều – Valery

+1

với N 1 nó hoạt động :) Cảm ơn bạn, tôi đã rất bối rối với cú pháp C++ CLI. – Cynede

10

Bạn có thể sử dụng pin_ptr <> để có được mảng không được quản lý

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

Mảng nguồn là đa chiều. Điều này LAF không đúng. –

+0

chính xác hơn là: mảng ^arr = Trận :: Bão :: GetBytes (0); nhưng tôi gặp lỗi: Lỗi lỗi C2440: 'khởi tạo': không thể chuyển đổi từ 'cli :: array ^' thành 'cli :: array ^' và trên dòng tiếp theo: Lỗi lỗi C2440: 'khởi tạo': không thể chuyển đổi từ 'cli :: interior_ptr ' thành 'cli :: pin_ptr ' – Cynede

+0

@nCdy: Loại trả về chính xác của 'Battle :: Storm :: GetBytes (0)' là gì? –

Các vấn đề liên quan