Bagikan melalui


Cara: Memuat Sumber Daya yang Tidak Dikelola ke dalam Array Byte

Topik ini membahas beberapa cara untuk memuat sumber daya yang tidak dikelola ke dalam Byte array.

Contoh

Jika Anda mengetahui ukuran sumber daya yang tidak dikelola, Anda dapat melakukan pra-alokasi array CLR, lalu memuat sumber daya ke dalam array menggunakan pointer ke blok array array CLR.

// load_unmanaged_resources_into_Byte_array.cpp
// compile with: /clr
using namespace System;
void unmanaged_func( unsigned char * p ) {
   for ( int i = 0; i < 10; i++ )
      p[ i ] = i;
}

public ref class A {
public:
   void func() {
      array<Byte> ^b = gcnew array<Byte>(10);
      pin_ptr<Byte> p =  &b[ 0 ];
      Byte * np = p;
      unmanaged_func( np );   // pass pointer to the block of CLR array.
      for ( int i = 0; i < 10; i++ )
         Console::Write( b[ i ] );
      Console::WriteLine();
   }
};

int main() {
   A^ g = gcnew A;
   g->func();
}
0123456789

Sampel ini menunjukkan cara menyalin data dari blok memori yang tidak dikelola ke array terkelola.

// load_unmanaged_resources_into_Byte_array_2.cpp
// compile with: /clr
using namespace System;
using namespace System::Runtime::InteropServices;

#include <string.h>
int main() {
   char buf[] = "Native String";
   int len = strlen(buf);
   array<Byte> ^byteArray = gcnew array<Byte>(len + 2);

   // convert any native pointer to IntPtr by doing C-Style cast
   Marshal::Copy( (IntPtr)buf, byteArray, 0, len );
}

Lihat juga

Menggunakan interop C++ (PInvoke implisit)