在使用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。
留言列表