Exportar (0) Imprimir
Expandir todo
Expandir Minimizar

Cómo: Cargar recursos no administrados en una matriz de bytes

En este tema se describen varias maneras de cargar recursos no administrados en una matriz Byte.

Ejemplo

Si sabe el tamaño del recurso no administrado, puede preasignar una matriz CLR y después cargar el recurso en la matriz usando un puntero al bloque de la matriz 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();
}

Resultados

0123456789

En este ejemplo se muestra cómo copiar datos de un bloque de memoria no administrado en una matriz administrada.

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

Vea también

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft