none
MessageBox用法报错,类型转换问题 RRS feed

  • 问题

  • 大家好,
    最近看教材有下面代码,关于消息响应的。

    case WM_CHAR:
            char szChar[20];
            sprintf (szChar, " the char is %d ", wParam);
            MessageBox(hWnd, szChar , NULL, MB_YESNO);
            break;

    发现编译通不过,错误是出现在  MessageBox中的szChar里
    我把它换成其他任何字符串"hello"等,都不可以,怎么解决呢?
    thanks

    报错如下
    error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'char [20]' to 'LPCWSTR'   
    2009年1月4日 14:30

答案

  •  

    case WM_CHAR:
            TCHAR szChar[20];
            wsprintf (szChar, TEXT("the char is %d"), wParam);
            MessageBox(hWnd, szChar , NULL, MB_YESNO);
            break;

     

    代码这样写最好,用TCHAR代替CHAR, wsprintf代替sprintf,无论ANSI和UINCODE都可以兼容。能用API的最好不要使用VC运行库。

    2009年1月5日 2:23
    版主

全部回复

  • 这个代码没考虑到unicode,而你的工程使用了unicode
    用TCHAR和_stprintf
    2009年1月4日 14:49
    版主
  • 也可以直接用MessageBoxA

    2009年1月5日 1:23
  •  

    case WM_CHAR:
            TCHAR szChar[20];
            wsprintf (szChar, TEXT("the char is %d"), wParam);
            MessageBox(hWnd, szChar , NULL, MB_YESNO);
            break;

     

    代码这样写最好,用TCHAR代替CHAR, wsprintf代替sprintf,无论ANSI和UINCODE都可以兼容。能用API的最好不要使用VC运行库。

    2009年1月5日 2:23
    版主
  • 谢谢楼上兄弟们,为什么最好不用VC库啊?

    2009年1月5日 7:49
  • VC Runtime 就是msvcr80.dll 其实还是调用的底层的API,所以不如直接调用API快

    2009年1月5日 11:06
    版主