2013-11-04 155 views
1

我遇到這個問題:錯誤:未申報LOWORD

LOWORD未申報

與這段代碼:

case WM_COMMAND: 
     { 
      if (lParam==0) 
      { 
       if ((LOWORD)wParam==IDM_HELLO) 
        MessageBox(0, L"Hello", (LPCSTR)szClassName, MB_OK); 
      } 
     break; 
     } 

我不知道我的損失。任何人都幫助我?

+1

'LOWORD'是一個「函數」宏。我保證你投給'LPCSTR'會把你的文字搞砸。 – chris

+0

您使用'LOWORD'就好像它是您可以投入的類型一樣,就像'DWORD'讓我微笑......這是我在20年前開始使用WinAPI時會犯的一種錯誤,很久以前有像這樣的互聯網網站可以提供幫助。進步是美好的。這是一個宏,如果你想知道 - 它會給你一個DWORD的低位字節。 –

+1

@chris,當你使用函數宏作爲對象時,它基本上根本不被識別。你沒有得到一個函數宏被錯誤使用的診斷。例如,這允許'(getchar)()'調用真正的C函數而不是宏(如果有的話),而不必'#undef getchar'。 – Kaz

回答

2

LOWORD不是您將變量賦予變量的類型,而是提取32位值的低16位的宏。如果將其更改爲:您的代碼可能會編譯爲:

case WM_COMMAND: 
{ 
    if (lParam==0) 
    { 
     if (LOWORD(wParam) == IDM_HELLO) 
     { 
      MessageBox(0, L"Hello", (LPCSTR)szClassName, MB_OK); 
     } 
    } 
    break; 
} 
+0

** + 1 **這對解決這個問題有一半的作用......它當然比試圖轉換爲LOWORD更好,但我認爲值得一提的是宏定義在'Windef.h ',你可以通過包含'Windows.h'來隱式包含它。很難想象在不包含'Windows.h'的情況下定義'WM_COMMAND'的情況,但你永遠不知道。 –