Nasıl yapılır: Yönetilmeyen Kaynakları Bayt Dizisine Yükleme
Bu konu başlığında, yönetilmeyen kaynakları bir Byte diziye yüklemenin çeşitli yolları açıklanmaktadır.
Örnekler
Yönetilmeyen kaynağınızın boyutunu biliyorsanız, CLR dizisini önceden yerleştirebilir ve ardından CLR dizisinin dizi bloğuna bir işaretçi kullanarak kaynağı diziye yükleyebilirsiniz.
// 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
Bu örnek, yönetilmeyen bir bellek bloğundan yönetilen bir diziye veri kopyalamayı gösterir.
// 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 );
}