How to: Load Unmanaged Resources into a Byte Array

来源:互联网 发布:linux网卡设置命令 编辑:程序博客网 时间:2024/05/17 09:12

[This documentation is for preview only, and is subject to change in later releases. Blank topics are included as placeholders.]

This topic discusses several ways to load unmanaged resources into a System.Byte array.

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: /clrusing 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: /clrusing 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 );}
转自:http://msdn.microsoft.com/en-us/library/26d6hf4z(v=vs.110).aspx

原创粉丝点击