2009-04-12 3 views

답변

3

Marshal.StringToHGlobalAnsi을 사용하여 System.String을 관리되지 않는 char *로 변환 할 수 있습니다. 완료되면 Marshal.FreeHGlobal으로 전화하여 무료로 제공해야합니다. 문자열을 숫자 값으로 변환하려면 Int32.Parse과 같은 일반 .NET 구문 분석 함수를 사용할 수 있습니다.

0

네이티브 코드에서 관리되는 메모리를 사용하려면 먼저 관리되는 메모리의 내용을 네이티브 메모리에 복사해야합니다.

const int len = 50; 
BYTE *destination = new BYTE[nLength]; 
System::Byte source[] = new System::Byte[len]; 

System::Runtime::InteropServices::Marshal:: 
    Copy(source, 0, IntPtr((void *)destination, len); 

우리가 관리되는 메모리를 처리하기 때문에이 가비지 콜렉션이 이동하고 다른 위치로 관리되는 데이터를 이동 할 수 있습니다 : 예를 들어, 그래서

다음과 같이

관리되는 메모리에서 내용을 복사입니다 변환하려는 데이터를 찾으려고하면 모두 손실됩니다.

const int len = 50; 
BYTE *source    = new BYTE[len]; 
System::Byte destination[]  = new System::Byte[len]; 
BYTE __pin *managedData = &(destination[0]); 

::memcpy(source, managedData, len); 
0

당신은 단순히

CString* name = new CString(managedName); 
에 의해 MFC CString을에 시스템 :: 문자열^객체를 변환 할 수 있습니다 비 관리 관리에서

그러므로 우리는 변환 __pin 사용하여 "메모리에 핀"할

여기서 managedName은 관리되는 String입니다.

관련 문제