Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
Delphi 10.2 Tokyo Professional
|
Re: [C] Zeichenfolge aus Funktion zurückgeben
13. Sep 2006, 15:04
Zitat von Luckie:
Ah, ja die Version von ste_ett funktioniert und ich habe sie verstanden.
Ok, dann muss ich wohl ein wenig erläutern
Code:
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),
pszBuf ? pszBuf : (LPTSTR)&pszBuf,
pszBuf ? nLenBuf : 0,
NULL);
return pszBuf;
}
Diese Routine kannst du auf variable Art aufrufen, bei C++ könntest du sogar noch Defaultwerte für die Parameter angeben. - Wenn du dwErrorCode übergibst, dann liefert sie die Beschreibung eben dafür, ansonsten für den letzten aufgetretenen Fehler (GetLastError()) (das Konstrukt "a ? b : c" bedeutet "wenn a <> 0 dann b sonst c").
- Wenn du einen Puffer bereitstellst und in pszBuf übergibst, dann nimmt er den (und nLenBuf), ansonsten lässt er FormatMessage den Speicher selbst belegen.
- Der Rückgabewert ist ein TCHAR *, damit du die Funktion direkt als Argument für MessageBox o.ä. benutzen kannst.
Beispiel:
Code:
#define countof(X) (sizeof(X) / sizeof(X[0]))
int
main (int argc, char **argv)
{
// Statischer Puffer mit fester Länge, Fehlermeldung 5
TCHAR szBuf[80];
printf(_T("%s\n"), SysErrorMessage(5, szBuf, countof(szBuf)));
// Dynamischer String, aktuelle Fehlermeldung
LPTSTR pszBuf;
pszBuf = SysErrorMessage(0, NULL, 0);
printf(_T("%s\n"), pszBuf);
LocalFree(pszBuf);
return 0;
}
|
|
Zitat
|