String은 ^
이므로 관리되는 참조 용 마커입니다. 기본적으로 객체 유형을 가리킬 수 있고 다른 포인터 유형을 가리키거나 무효화 할 수 있다는 점을 제외하면 관리되지 않는 영역에서는 *
과 같은 방식으로 사용됩니다.
TCHAR
는 #define에 의해 정의 (혹은, 내가 기억할 수없는 typedefed)를 _UNICODE 전 처리기 정의에 따라, char
또는 wchar_t
중 하나입니다. 따라서, 나는 그것을 사용하여 코드를 두 번 작성합니다.
어느 인라인 :
TCHAR* str;
String^ managedString
#ifdef _UNICODE
str = (TCHAR*) Marshal::StringToHGlobalUni(managedString).ToPointer();
#else
str = (TCHAR*) Marshal::StringToHGlobalAnsi(managedString).ToPointer();
#endif
// use str.
Marshal::FreeHGlobal(IntPtr(str));
또는 출력 버퍼가 이미 할당 충분히 큰되었다고 가정 둘 변환 방법의 한 쌍
. 메소드 오버로딩은 TCHAR의 정의에 따라 올바른 것을 선택하도록해야합니다.
void ConvertManagedString(String^ managedString, char* outString)
{
char* str;
str = (char*) Marshal::StringToHGlobalAnsi(managedString).ToPointer();
strcpy(outString, str);
Marshal::FreeHGlobal(IntPtr(str));
}
void ConvertManagedString(String^ managedString, wchar_t* outString)
{
wchar_t* str;
str = (wchar_t*) Marshal::StringToHGlobalUni(managedString).ToPointer();
wcscpy(outString, str);
Marshal::FreeHGlobal(IntPtr(str));
}
re : 귀하의 깃발 - 당신이 이메일로 팀 @ stackoverflow 그 도움이 필요합니다. 또한, 교훈을 배웠습니까? – Will