Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Neustart der Applikation aus Stabilitätsgründen... (https://www.delphipraxis.net/211311-neustart-der-applikation-aus-stabilitaetsgruenden.html)

venice2 29. Aug 2022 15:12

AW: Neustart der Applikation aus Stabilitätsgründen...
 
Zitat:

Du kannst einen kleinen Nagel auch mit einer Zange ins Holz hauen
Klar doch.
Nehme lieber einen Fingerhut damit geht's auch.

Nu dann ist die Unit von Uwe auch falsch bis auf den zusätzlichen Parameter ist es der gleiche Aufruf.
Delphi-Quellcode:
  if AutoRestart then begin
    ShellExecute(0, 'open', PChar(ParamStr(0)), AutoRestartCmdLine, nil, SW_SHOW);
PWideChar bleibt PWideChar ob ich nun PChar übergebe und der passende Pendant vom Compiler zu gewiesen wird bleibt sich gleich.
Also verwende ich die passende Konvertierung direkt.

Müßig jetzt darüber zu streiten.

himitsu 29. Aug 2022 15:28

AW: Neustart der Applikation aus Stabilitätsgründen...
 
Zitat:

Zitat von venice2 (Beitrag 1510950)
Also verwende ich die passende Konvertierung direkt.

Sie sind nur zufällig passend.

ShellExecuteW und PWideChar mit einem UnicodeString oder WideString
oder ShellExecute und PChar mit einem String.

Früher dachten auch viele ShellExecute mit PAnsiChar funktioniert ja, da PChar ein PAnsiChar war. :roll:

venice2 29. Aug 2022 15:43

AW: Neustart der Applikation aus Stabilitätsgründen...
 
Zitat:

Sie sind nur zufällig passend.
Ach.. Sicher doch. Zufällig!

Unit ShellAPI

Delphi-Quellcode:
function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,
  Directory: PWideChar; ShowCmd: Integer): HINST; stdcall;

function ShellExecute; external shell32 name 'ShellExecuteW';

himitsu 29. Aug 2022 16:42

AW: Neustart der Applikation aus Stabilitätsgründen...
 
Niemand hat behauptet, dass Delphi frei von Bugs sei. :stupid:

Delphi 7
Delphi-Quellcode:
function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,
  Directory: PAnsiChar; ShowCmd: Integer): HINST; stdcall;

function ShellExecute; external shell32 name 'ShellExecuteA';
Lazarus/FreePascal
Delphi-Quellcode:
{ascfun.inc} function ShellExecute(_para1:HWND; _para2:pchar; _para3:pchar;_para4:pchar; _para5:pchar;_para6:longint):HINST; external 'shell32' name 'ShellExecuteA';

sowie
Delphi-Quellcode:
{unifun.inc} function ShellExecute(_para1:HWND; _para2:LPCWSTR; _para3:LPCWSTR; _para4:LPCWSTR; _para5:LPCWSTR;_para6:longint):HINST; external 'shell32' name 'ShellExecuteW';


DevExpress (es geht auch einfacher, bzw. delphi-typischer, inkl. automatischer String-Konvertierung)
Delphi-Quellcode:
function dxShellExecute(AHandle: HWND; const AFileName: string; AShowCmd: Integer = SW_SHOWNORMAL): Boolean; overload;




Ansonsten werden natürlich für compiler-abhängige "Alias" auch die compiler-abhängigen Typen benutzt, was ja eigentlich klar sein sollte.
Code:
SHSTDAPI_(HINSTANCE) ShellExecuteA(__in_opt HWND hwnd, __in_opt LPCSTR lpOperation, __in LPCSTR lpFile, __in_opt LPCSTR lpParameters,
    __in_opt LPCSTR lpDirectory, __in INT nShowCmd);
SHSTDAPI_(HINSTANCE) ShellExecuteW(__in_opt HWND hwnd, __in_opt LPCWSTR lpOperation, __in LPCWSTR lpFile, __in_opt LPCWSTR lpParameters,
    __in_opt LPCWSTR lpDirectory, __in INT nShowCmd);
#ifdef UNICODE
#define ShellExecute ShellExecuteW
#else
#define ShellExecute ShellExecuteA
#endif // !UNICODE
Im Prinzip ist es ein Übersetzungsfehler ... da Pascal/Delphi leider keine Makros oder Funktions-Aliase kennt, hätte hier der Header besser anders übersetzt werden sollen.
Da Delphi selber aber keine Umschaltung zwischen ANSI und Unicode kann, gibt es hier nur auf der Entwicklerseite eventuelle Problemchen.

Allerdings hat es beim anderen ShellExecuteEx hier mal richtig funktioniert.
Delphi-Quellcode:
function ShellExecuteEx(lpExecInfo: PShellExecuteInfo):BOOL; stdcall;
function ShellExecuteExA(lpExecInfo: PShellExecuteInfoA):BOOL; stdcall;
function ShellExecuteExW(lpExecInfo: PShellExecuteInfoW):BOOL; stdcall;


Anders sieht es z.B. beim IShellDispatch2.ShellExecute aus, denn Dieses ist explizit ausschließlich als Unicode deklariert.
Delphi-Quellcode:
    [SID_IShellDispatch2]
    function ShellExecute(&File: WideString; vArgs, vDir, vOperation,
      vShow: OleVariant): HRESULT; stdcall;

venice2 29. Aug 2022 16:58

AW: Neustart der Applikation aus Stabilitätsgründen...
 
Zitat:

Niemand hat behauptet, dass Delphi frei von Bugs sei.
Dann solltest du das nicht grundsätzlich als ein von mir generierten Fehler abtun
sondern dich erst einmal auf die Gegebenheiten konzentrieren.

Ich übergebe die Definitionen die seitens meines verwendeten Delphi vorgegeben sind.
Ob diese letztendlich falsch sind oder nicht mag dahin gestellt sein.
Darum geht es doch letztendlich.
Zudem denke ich auch nicht das D2010 noch in irgendeiner weise Aktualisierungen bekommen wird.

Somit dürften alle Unklarheiten beseitigt sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 Uhr.
Seite 3 von 3     123   

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