Ich habe mir gerade eine eigene SysErrorMessage Funktion geschrieben:
Delphi-Quellcode:
function SysErrorMessage(ErrorCode: DWORD):
string;
function Trim(
const S: WideString): WideString;
var
I, L : Integer;
begin
L := Length(S);
I := 1;
while (I <= L)
and (S[I] <= '
')
do
Inc(I);
if I > L
then
Result := '
'
else
begin
while S[L] <= '
'
do
Dec(L);
Result := Copy(S, I, L - I + 1);
end;
end;
var
Len : Integer;
Buffer :
array[0..255]
of Char;
hDll : THandle;
resourcestring
rsErrMsg = '
Fehlercode nicht gefunden';
begin
result := '
';
Len := FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
nil, ErrorCode, 0, Buffer, SizeOf(Buffer),
nil);
if Len = 0
then
begin
hDll := LoadLibraryEx('
netmsg.dll', 0, DONT_RESOLVE_DLL_REFERENCES);
if hDll <> 0
then
begin
Len := FormatMessage(FORMAT_MESSAGE_FROM_HMODULE
or FORMAT_MESSAGE_FROM_SYSTEM, @hDll, ErrorCode, 0, Buffer,
sizeof(Buffer),
nil);
FreeLibrary(hDll);
if Len <> 0
then
result := Trim(
string(Buffer) + '
(Netzwerk)')
else
result := rsErrMsg;
end;
end
else
result := Trim(
string(Buffer));
end;
Wie man sieht wird nach dem ersten Aufruf von
FormatMessage der Rückgabewert geprüft und wenn der null ist wird in der netmsg.dll nach dem Fehlercode geguckt. In der netmsg.dll sind wohl die Netzwerkfehler hinterlegt. dan hab eichmir alle Fehlercodes mal in eine Textdaie ausgeben lassen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
sl : TStringList;
begin
sl := TStringList.Create;
for i := 0 to 15999 do
begin
sl.Add(IntToStr(i) + ': ' + SysErrorMessage(i));
end;
sl.SaveToFile('d:\erros.txt');
FreeAndNil(sl);
end;
Aber dort taucht nie ein Netzwerkfehler auf. Jetzt frage ich mich, welche Fehlercodes haben Netzwerkfehler? Ich will die Funktion einfach mal durchtesten.