![]() |
WNetGetLastError
Ich versuche gerade obige Funktion zu benutzen, aber irgendwie will es nicht klappen:
Delphi-Quellcode:
Der Buffer ist immer leer, obwohl eigentlich was drinne stehen sollte. Der Fehlercode ist 1219 und net -helpmsg 1219 gibt folgenden Text aus:
function NetErrorMessage(Error: DWORD): String;
var buffer: array [0..1024] of Char; err: DWORD; begin err := Error; WNetGetLastError(err, buffer, sizeof(buffer), nil, 0); result := String(buffer); end; Zitat:
Zitat:
So sieht das in der Übersicht aus:
Delphi-Quellcode:
Aber leider ist die Messagebox immer leer. :(
dummy := ConnectToNetworkDrive('', ComputerTemp + '\IPC$', User, PW, False);
if dummy <> 0 then begin if dummy = ERROR_EXTENDED_ERROR then Messagebox(hDlg, PChar(NetErrorMessage(dummy)), PChar(rsNoSelectionCaption), MB_ICONERROR) else MessageBox(hDlg, PChar(SysErrorMessage(dummy)), PChar(rsNoSelectionCaption), MB_ICONERROR); |
Re: WNetGetLastError
Zitat:
Falls SysErrorMessage nichts liefert, kann das daran liegen, dass der Errortext aus den Resourcen einer anderen DLL gezogen werden müssen:
Delphi-Quellcode:
function ErrorMessageFromModule(ErrorCode: Integer; hm:HModule): string;
var Len: Integer; begin SetLength(Result, 512); Len := FormatMessage(FORMAT_MESSAGE_FROM_HMODULE (*or FORMAT_MESSAGE_ARGUMENT_ARRAY*) or FORMAT_MESSAGE_IGNORE_INSERTS, Pointer(hm), ErrorCode, 0, PChar(Result), 512, nil); while (Len > 0) and (Result[Len - 1] in [#0..#32, '.']) do Dec(Len); SetLength(Result, Len); end; errormsg := ErrorMessageFromModule(errorcode, GetModuleHandle('mpr.dll')); |
Re: WNetGetLastError
Liefert beim Rückgabewert 1219 auch einen Leerstring. :( Deshalb habe ich es ja mit WNetGetLastError probiert. Aus welchen Modul werden sie denn normalerweise geladen?
|
Re: WNetGetLastError
Ich habe gerade noch etwas Forschungsarbeit betrieben...
Die Meldung ist in kernel32.dll abgelegt. Mit einem (guten) Resourceneditor (z.B. ![]() Das Problem scheint daran zu liegen, dass SysErrorMessage max 255 Zeichen liefen kann. :twisted: Folgendes klappt aber:
Delphi-Quellcode:
function ErrorMessageFromModule(ErrorCode: Integer; hm:HModule): string;
var Len: Integer; begin SetLength(Result, 2048-16); // das sollte in 2kb gerade noch reinpassen Len := FormatMessage(FORMAT_MESSAGE_FROM_HMODULE (*or FORMAT_MESSAGE_ARGUMENT_ARRAY*) or FORMAT_MESSAGE_IGNORE_INSERTS, Pointer(hm), ErrorCode, 0, PChar(Result), Length(Result), nil); while (Len > 0) and (Result[Len - 1] in [#0..#32, '.']) do Dec(Len); SetLength(Result, Len); end; ShowMessage(ErrorMessageFromModule(1219, GetModuleHandle('kernel32.dll'))); |
Re: WNetGetLastError
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz