Condividi tramite


Procedura: caricare risorse non gestite in una matrice di byte

In questo argomento vengono illustrati diversi modi per caricare le risorse non gestite in una Byte matrice.

Esempi

Se si conoscono le dimensioni della risorsa non gestita, è possibile preallocare una matrice CLR e quindi caricare la risorsa nella matrice usando un puntatore al blocco di matrice della matrice 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

Questo esempio illustra come copiare dati da un blocco di memoria non gestito a una matrice gestita.

// 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 );
}

Vedi anche

Uso delle funzionalità di interoperabilità C++ (PInvoke implicito)