[Step. 19] char* -> 관리코드, 관리코드 -> char*

C++/CLI 2010. 12. 20. 09:00 Posted by 알 수 없는 사용자

char*는 문자열을 뜻하는 것이 아니고 char형의 포인터를 뜻합니다.

C++의 네트웍 프로그래밍에서는 네트웍으로 데이터를 주고 받을 때 char* 타입으로 주고 받습니다.

 

// 보내기

char* pPacket;

Send(pPacket, nLength);


// 받기

char* pBuffer = new char[MAX_BUFFER];

int nLength = Receive( pBuffer );

 

C++/CLI에서 C++로 만든 네트웍 라이브러리를 사용하는 경우 필연적으로 char*을 관리코드로 바꾸고, 관리코드를 char*로 바꾸어야 하는 경우가 있을 것입니다.



 

char* -> 관리코드


C++/CLI에서 char* array< Byte >로 마샬링 하면 됩니다.

// 비관리코드

int nPacketSize = 34;

char* pPacket = new char[34];

 

// 관리코드

array< Byte >^ byteArray = gcnew array< Byte >(nPacketSize);

System::Runtime::InteropServices::Marshal::Copy( (IntPtr)pPacket, byteArray,

0, nPacketSize );

 

 

관리코드 -> char*

 

// 관리코드

array<Byte>^ SendData;

….

 

// 비관리코드

int nLength = SendData->Length;

pin_ptr<Byte> pData = &SendData[0];

                    

char* pBuffer = new char[ nLength ];

CopyMemory( pBuffer, pData, nLength );

 

참고로 C++/CLI에서는 바이트형 배열 array<Byte> C#에서는 byte[] 이 됩니다.