Почему Windows API отвечает кодами ошибок в зависимости от моих операторов регистрации - PullRequest
0 голосов
/ 05 июня 2018

У меня есть некоторый код, чтобы захватить дескриптор окна и затем получить его прямоугольник.

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

Этот код работает нормально, и значения сохраняются в прямоугольнике, когда у меня нет операторов логирования.Когда я добавляю этот оператор регистрации сразу после ...

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

, я получаю ошибку (код ошибки 1400) из метода GetLastError() winapi, показывающую, что мы не смогли найти дескриптор окна и получить окнапрямоугольник.

Когда я использую этот оператор ведения журнала, я не получаю ошибку.

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

В чем может быть причина этого?

1 Ответ

0 голосов
/ 05 июня 2018

Правильный код:

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

GetWindowRect ожидает указатель на существующую структуру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...