close

在使用win32 api 的 messagebox 時碰上一個問題,就是函式中的型別轉換上出了問題。

char szFileName[MAX_PATH];

HINSTANCE hInstance = GetModuleHandle(NULL);

GetModuleFileName(hInstance, szFileName, MAX_PATH);
MessageBox(hWnd, szFileName, "This program is:", MB_OK | MB_ICONINFORMATION);

紅字部分是出問題的根本。

szFileName此陣列會因為型別的不同,導致後續的函式無法正常使用。

雖然在某個網站所提供的原始碼裡,可見他順利運行。

但,在我的程式裡卻不行。

或許問題是出在本身的編譯器上吧。(該網站是使用c,我則是使用c++)

以下就是問題的解決方法:

TCHAR szFileName[MAX_PATH];

HINSTANCE hInstance = GetModuleHandle(NULL);

GetModuleFileName(hInstance, szFileName, MAX_PATH);
MessageBox(hWnd, szFileName, TEXT("This program is:"), MB_OK | MB_ICONINFORMATION);

只要更改成這樣,messagebox就可以成功運行了。

1 #ifdef   UNICODE    
2           typedef   wchar_t   TCHAR;    
3  
4 #else    
5           typedef   unsigned   char   TCHAR;    
6  
7 #endif    
8 typedef   unsigned   char   CHAR;    
9 typedef   unsigned   wchar_t   WCHAR;

上表是c裡頭定義的 char 類別

其中,TCHAR是依照是否支援UNICODE而定。

而基本的char 是 unsigned char;WCHAR則是unsigned wchar_t。

在程式使用sizeof(TCHAR),得到的值會是1;當定義為UNICODE時,則會得到2。

arrow
arrow
    全站熱搜

    雜音十三 發表在 痞客邦 留言(0) 人氣()