링크

('' 위부분이 링크입니다. 클릭하시면 MSDN 이 연결됩니다.

최근에 열심히 알바 뛰고 있는 확장형 C++ 입니다. 국내에 레퍼런스라고는
MSDN 이 고작이더군요 하지만 부지런히 하다보니 대충 알만 합니다. ^^;

MSDN 을 10여년 가까이 접해오다 보면 한가지 특징이 있습니다. 중간에 링크가
깨질 수가 있다는 것!! 그래서 예제 코드를 남깁니다.

아래는 관리되는 코드를 비관리 코드 (Native) 의 배열로 변경하는 과정입니다. 중간의
pin_ptr 이 포인트 입니다.

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


반대되는 비관리되는 배열을 관리되는 코드로 바꾸는 부분입니다.

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

+ Recent posts