Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.168 Beiträge
 
Delphi 12 Athens
 
#19

AW: Verrücktes Problem mit Delphi7 und ShellExecute

  Alt 24. Feb 2016, 11:28
Zitat:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
   if ShellExecute(Handle,'open','notepsd.exe','', nil, SW_SHOWNORMAL) <= 32 then
      RaiseLastOSError();
end;
Mit einer falschen Fehlerbehandlung kann man auch viel Schrott produzieren.

Bei Google suchenShellExecute/ShellExecuteEx gibt den Fehler nicht per GetLastError zurück.

RaiseLastOSError nutzt aber GetLastError
Und den Result als Parameter an RaiseLastOSError zu übergeben geht auch nicht, da die Fehlercodes sich unterscheiden.

Delphi-Quellcode:
function ShellExecuteGLE(hWnd: HWND; Operation, FileName, Parameters, Directory: PWideChar; ShowCmd: Integer): HINST; overload;
begin
  Result := ShellExecuteGLE(hWnd, Operation, FileName, Parameters, Directory, ShowCmd);
  if Result <= 32 then begin
    case Result of // Übersetzung: DDE Error > Win32 Error Code
      0: Result := ERROR_OUTOFMEMORY;
      ERROR_BAD_FORMAT: ;
      SE_ERR_ACCESSDENIED: Result := ERROR_ACCESS_DENIED;
      SE_ERR_ASSOCINCOMPLETE: Result := {?}ERROR_ACCESS_DENIED;
      SE_ERR_DDEBUSY: Result := {?}ERROR_BUSY;
      SE_ERR_DDEFAIL: Result := ERROR_DDE_FAIL;
      SE_ERR_DDETIMEOUT: Result := {?}ERROR_TIMEOUT;
      SE_ERR_DLLNOTFOUND: Result := ERROR_DLL_NOT_FOUND;
      SE_ERR_FNF: Result := ERROR_FILE_NOT_FOUND;
      SE_ERR_NOASSOC: Result := ERROR_NO_ASSOCIATION;
      SE_ERR_OOM: Result := {?}RPC_S_OUT_OF_RESOURCES;
      SE_ERR_PNF: Result := ERROR_PATH_NOT_FOUND;
      SE_ERR_SHARE: Result := ERROR_SHARING_VIOLATION;
    end;
    SetLastError(Result);
    Result := 0; // INVALID_HANDLE_VALUE?
  end;
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (24. Feb 2016 um 11:31 Uhr)
  Mit Zitat antworten Zitat