Partager via


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

Mise à jour : novembre 2007

Cette rubrique décrit différentes manières de charger des ressources non managées dans un tableau Byte.

Exemple

Si vous connaissez la taille de votre ressource non managée, vous pouvez préallouer un tableau CLR, puis charger la ressource dans celui-ci à 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

Référence

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