首页 > 解决方案 > 为什么 Windows API 响应错误代码取决于我的日志记录语句

问题描述

我有一些代码来获取窗口句柄,然后获取它的矩形。

HWND hWnd = FindWindow("CalcFrame", NULL);

LPRECT rect;
int retval = GetWindowRect(hWnd, rect);

if (retval == 0) {
    DWORD error = GetLastError();
    std::cout << error << "\n";
} else {
    std::cout << "FindWindow/GetWindowRect Success" << "\n";
}

此代码工作正常,当我没有日志记录语句时,这些值存储在 rect 中。当我在...之后直接添加此日志记录语句时

std::cout << rect->left << "," << rect->top << "," << rect->right << "," << rect->bottom << "\n";

我从 winapi 方法得到一个错误(错误代码 1400)GetLastError(),表明我们找不到窗口句柄并获取窗口矩形。

当我使用此日志记录语句时,我没有收到任何错误。

std::cout << "Right: " << rect->right << "\n";
std::cout << "Bottom: " << rect->bottom << "\n";

这可能是什么原因?

标签: c++winapi

解决方案


正确的代码是:

RECT rect;
int retval = GetWindowRect(hWnd, &rect);

GetWindowRect需要一个指向现有结构的指针。


推荐阅读