c - 如果比较不适用于 char,则很简单

标签 c string if-statement

我正在创建一个 DLL 来检查用户何时按下应用程序窗口上的关闭按钮,它工作正常,然后我想这样做,以便当 _text 全局变量为空时,不会显示任何消息。 我不明白为什么简单的 if (_text != "") 不起作用...我做错了什么吗?

#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;
}

最佳答案

您正在检查指针 _text 是否等于空字符串,而不是 _text 指向的字符串是否等于空字符串。你可能想做类似的事情:

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

关于c - 如果比较不适用于 char,则很简单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12228552/

相关文章:

iphone - Objective-C : Comparing CGPoints

c - C语言嵌入ARM汇编

ios - 如何在 UITableView 中显示数组中的字符串?

java - 使用 Stringbuilder 的神秘空白

c++ - 在 C++ 中将罗马数字转换为标准数字

python - 在Tkinter中尝试约会-Python

python - for if 循环根据条件进行分类

c - 使用指针反转字符串中的单词

c - 使用 scanf 进行 while 循环来调用函数

c++ - 在c中的函数内部定义一个函数