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[] 이 됩니다.
'C++/CLI' 카테고리의 다른 글
[Step. 21] 닷넷에서 HalfNetwork를 사용하자 - 2 (0) | 2010.12.30 |
---|---|
[Step. 20] 닷넷에서 HalfNetwork를 사용하자 - 1 (2) | 2010.12.27 |
[Step. 18] 순수 가상 함수 (3) | 2010.12.10 |
[Step. 17] 델리게이트에 비관리 함수를 할당하기 그리고 다음 예고 (2) | 2010.11.17 |
[Step. 16] array 클래스에 non-CLI 오브젝트 사용 (0) | 2010.10.27 |