2017-10-24 6 views
1

현재 Windows Universal App을 사용하여 C++/CX를 배우고 있으며 MessageDialog에 catch 된 예외 메시지를 표시하려고하지만 C++/CX는 내가하지 않는 방식으로 작동합니다 내가 char*string 유형으로 변환 할 수 없다는 점을 이해하십시오. 이는 MessageDialog이 입력으로 기대하는 것입니다.MessageDialog에 Caught 예외가 표시됨

catch (const std::invalid_argument ex) 
{ 
    MessageDialog^ ErrorBox = ref new MessageDialog(ex.what()); 
    ErrorBox->ShowAsync(); 
} 

내가 도와 주시면 감사하겠습니다.

+0

MessageDialog가 해당 컨텍스트에서 유효하면^문자를 회수하지 않습니까? –

답변

2

MessageDialogPlatform::String을 허용합니다.

wchar_t buffer[ MAX_BUFFER ]; 
mbstowcs(buffer, ex.what(), MAX_BUFFER); 
platformString = ref new Platform::String(buffer); 

이해야 : 당신이 그것을 어떻게

Platform::Stringchar16* s

받아 그리고 당신은 char*, 그래서, 당신은 char16*로 변환하는 방법을 찾아야한다, 이것은이다 작업 :

catch (const std::invalid_argument ex) 
{ 
    wchar_t buffer[ MAX_BUFFER ]; 
    mbstowcs(buffer, ex.what(), MAX_BUFFER); 
    platformString = ref new Platform::String(buffer); 
    MessageDialog^ ErrorBox = ref new MessageDialog(platformString); 
    ErrorBox->ShowAsync(); 
} 
+0

도움을 주셔서 감사합니다! 조금 변경해야했지만 MAX_BUFFER는 라이브러리의 일부라고 생각했지만 작동하지 못했습니다. 대신 정수를 사용했습니다. 그리고 mbstowcs 대신 mbstowcs_s를 사용해야했습니다. 컴파일러가 전자가 안전하지 않다고 불평했기 때문입니다. 다시 고맙습니다. :) – jAndersen

관련 문제