Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
This topic discusses several ways to load unmanaged resources into a Byte array.
Examples
If you know the size of your unmanaged resource, you can preallocate a CLR array and then load the resource into the array using a pointer to the array block of the CLR array.
// 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
This sample shows how to copy data from an unmanaged memory block to a managed array.
// 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 );
}