Procedura: caricare risorse non gestite in una matrice di byte
In questo argomento vengono illustrati alcuni modi per caricare risorse non gestite in una matrice Byte.
Esempio
Se si conosce la dimensione della risorsa non gestita, è possibile preallocare una matrice CLR e quindi caricare la risorsa nella matrice utilizzando 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();
}
In questo esempio viene illustrato come copiare i dati da un blocco di memoria non gestita 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 );
}
Vedere anche
Riferimenti
Utilizzo delle funzionalità di interoperabilità C++ (PInvoke implicito)