Partager via


Comment : charger des ressources non managées dans un tableau d'octets

Cette rubrique décrit plusieurs façons de charger des ressources non managées dans un Byte tableau.

Exemples

Si vous connaissez la taille de votre ressource non managée, vous pouvez préallouer un tableau CLR, puis charger la ressource dans le tableau à l’aide d’un pointeur vers le bloc de tableau du tableau 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

Cet exemple montre comment copier des données d’un bloc de mémoire non managé vers un tableau managé.

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

Voir aussi

Utilisation de l’interopérabilité C++ (PInvoke implicite)