2012-09-01 30 views
1

我正在創建一個DLL來檢查用戶何時按下應用程序窗口上的關閉按鈕,它工作正常,然後我想這樣做,以便當_text全局變量爲空時,沒有消息將被顯示。 我不明白爲什麼一個簡單的if(_text!=「」)不起作用...我做錯了什麼?簡單如果比較不適用於char

#include <windows.h> 
#define export extern "C" __declspec (dllexport) 

WNDPROC GameWndProc = NULL; 
HWND GameHwnd = NULL; 
double _button_result = 0; 
char* _text; 
char* _title; 

LRESULT CALLBACK SubClassWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    switch(uMsg) { 
     case WM_CLOSE: 

      if (_text != "") { 
       if (MessageBox(GameHwnd, (LPSTR)_text, (LPSTR)_title, MB_YESNO|MB_APPLMODAL) == IDYES) { 
        _button_result = 1; 
        return 0; 
       } else { 
        return 0; 
       } 
      }   

      _button_result = 1; 
      return 0; 
     break; 
    } 

    return CallWindowProc(GameWndProc, hwnd, uMsg, wParam, lParam); 
} 

export double _window_check_close_init(double window_handle, char* _msg_text, char* _msg_title) 
{ 
    GameHwnd = (HWND)(int)window_handle; 
    GameWndProc = (WNDPROC)SetWindowLongPtr(GameHwnd, GWL_WNDPROC, (LONG)SubClassWndProc); 
    _text = _msg_text; 
    _title = _msg_title; 

    if (!GameWndProc) { 
     return 0; 
    } 

    return 1; 
} 

export double _window_check_close() 
{ 
    if (_button_result == 1) { 
     _button_result = 0; 
     return 1; 
    } else { 
     return 0; 
    } 
} 

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) 
{ 
    if (fdwReason == DLL_PROCESS_DETACH) { 
     if (IsWindow(GameHwnd) && GameWndProc) { 
      SetWindowLongPtr(GameHwnd, GWL_WNDPROC, (LONG)GameWndProc); 
     } 
    } 
    return TRUE; 
} 

回答

3

你檢查,如果指針_text等於空字符串,而不是如果字符串指向_text等於空字符串。你可能想要做的事,如:

if (strlen(_text) !=0) 
... rest of your code... 
+0

謝謝,我會一起去的。它很好地工作。 :) – user780756

2

使用strcmp()比較字符串:

if (strcmp(_text, "") != 0) { 

} 
0

只是爲了澄清指針和位置的內容之間的差異,其指針指向:

  • 的char * _text:變量「文本」是指針。如果你在調試器中查看它,它將保存一個十六進制值,這將是一個內存地址。你的情況_text保存字符串的地址_msg_text

  • _text!=「」:你在比較兩個指針,而不是它們的內容。 「」在這個語句中返回空字符串的位置,它將再次是一些十六進制值,這是一個內存地址。

你需要做的是_text的內容與空字符串「」

以上的答案是正確的比較。

+0

默認情況下,答案按票數排序,用戶可以更改該排序順序。所以最好不要談論「以上的答案」:-) –

+0

謝謝澄清,我完全忘記了我正在試圖比較一個指針......在C中仍然是新的。 – user780756