Когда вы выполняете вызовы библиотеки времени выполнения, она, в свою очередь, может вызывать функции Win32 API и сбрасывать значение ошибки.Исправьте ваш код следующим образом:
SetLastError(23);
DWORD err = GetLastError();
qDebug() << "LastError: " << err;
Это гарантирует, что вы прочитаете значение ошибки до того, как среда выполнения вызовет функции Win32.