如何将(托管到非托管)数组<System :: Byte ^>转换为byte*?

cnd*_*cnd 8 c++-cli

我需要帮助来进行这样的转换:

byte* bytes = Battle::Storm::GetBytes(0);
Run Code Online (Sandbox Code Playgroud)

现在我收到错误:

错误3错误C2440:'初始化':无法从'cli :: array ^'转换为'byte*'

我怎样才能做到这一点?

ali*_*hoo 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;
Run Code Online (Sandbox Code Playgroud)

这里数字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];
Run Code Online (Sandbox Code Playgroud)


小智 10

您可以使用pin_ptr <>来获取非托管数组

array<Byte>^ arr =  gcnew array<Byte>(100) ;
pin_ptr<unsigned char> pUnmanagedArr = &arr[0];
Run Code Online (Sandbox Code Playgroud)