C++ WINAPI pobieranie ostatniego błędu

C++ WINAPI pobieranie ostatniego błędu
P3
  • Rejestracja:około 4 lata
  • Ostatnio:ponad rok
  • Postów:103
0

Witam
Próbuje coś robić w winapi i mam taki problem że chciałbym pobrać ostatni błąd funkcją "GetLastError" która zwraca "DWORD" unsigned long. Chciałbym gdzieś to wyświetlić. Program tworze w wersji okienkowej, wiem że można zrobić konsole, ale to jest dość trudne, później wyświetlanie tych danych.
Tworzę buffor "LPSTR" funkcją GlobalAlloc. a następnie zawartość tego bufora albo narysuję TextOut lub stworzę MessageBox, te dwie funkcje przyjmują takie typy danych jak LPSTR. Tylko nie wiem jak przerzutować DWORD(unsinged long) na char[]

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 2 godziny
4

Tworzę buffor "LPSTR" funkcją GlobalAlloc.

Nie potrzebujesz GlobalAlloc. Używaj new+delete albo tablicy.

Tylko nie wiem jak przerzutować DWORD(unsinged long) na char[]

std::to_string

Kopiuj
#include <string>
#include <windows.h>

int main()
{
    auto err = GetLastError();
    MessageBoxA(nullptr, std::to_string(err).c_str(), "Blah", MB_OK);
    MessageBoxW(nullptr, std::to_wstring(err).c_str(), L"Blah but in Unicode", MB_OK);
}
edytowany 3x, ostatnio: Azarien
several
  • Rejestracja:prawie 16 lat
  • Ostatnio:około 3 godziny
5

Raczej nie chcesz rzutować liczby na string, tylko dostać sformatowany komunikat błędu. Można to zrobić tak.

Kopiuj
std::string winLastErrStr()
{
    CHAR errorMsg[1024];
    const DWORD errorCode = GetLastError();

    FormatMessageA(
      FORMAT_MESSAGE_FROM_SYSTEM,
      NULL,
      errorCode,
      0,
      errorMsg,
      1024,
      NULL);

    return std::string(errorMsg);
}

edytowany 3x, ostatnio: several
kq
Z reguły łatwiej używać numerycznych kodów błędów, lub pary numer+string

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.