Forum: Programmieren allgemein
by Flocke,
13. Sep 2006
Ok, dann muss ich wohl ein wenig erläutern :???:
TCHAR *
SysErrorMessage (DWORD dwErrorCode, TCHAR *pszBuf, int nLenBuf)
{
FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM | (pszBuf ? FORMAT_MESSAGE_ALLOCATE_BUFFER : 0),
NULL,
dwErrorCode ? dwErrorCode : GetLastError(),
Forum: Programmieren allgemein
by Flocke,
13. Sep 2006
Etwa so:
TCHAR *
SysErrorMessage (DWORD dwErrorCode, TCHAR *pszBuf, int nLenBuf)
{
FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM | (pszBuf ? FORMAT_MESSAGE_ALLOCATE_BUFFER : 0),
NULL,
dwErrorCode ? dwErrorCode : GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
Forum: Programmieren allgemein
by Flocke,
13. Sep 2006
Ganz grober Schnitzer: szBuf liegt auf dem Stack, ist also nach dem Aufruf der Funktion eigentlich nicht mehr gültig. Wenn der Inhalt noch drin steht, dann hast du Glück. Ein erster Bugfix wäre, static TCHAR szBuf; zu benutzen.
Allerdings ist es in C üblich, den Ergebnisparameter zusammen mit der maximalen Länge zu übergeben, wie ste_ett schon schrieb.