Aracılığıyla paylaş


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

Ayrıca bkz.

C++ Birlikte Çalışabilirliği Kullanma (Örtük PInvoke)