![]() |
AW: Neustart der Applikation aus Stabilitätsgründen...
Zitat:
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:
PWideChar bleibt PWideChar ob ich nun PChar übergebe und der passende Pendant vom Compiler zu gewiesen wird bleibt sich gleich.
if AutoRestart then begin
ShellExecute(0, 'open', PChar(ParamStr(0)), AutoRestartCmdLine, nil, SW_SHOW); Also verwende ich die passende Konvertierung direkt. Müßig jetzt darüber zu streiten. |
AW: Neustart der Applikation aus Stabilitätsgründen...
Zitat:
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: |
AW: Neustart der Applikation aus Stabilitätsgründen...
Zitat:
Unit ShellAPI
Delphi-Quellcode:
function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,
Directory: PWideChar; ShowCmd: Integer): HINST; stdcall; function ShellExecute; external shell32 name 'ShellExecuteW'; |
AW: Neustart der Applikation aus Stabilitätsgründen...
Niemand hat behauptet, dass Delphi frei von Bugs sei. :stupid:
Delphi 7
Delphi-Quellcode:
Lazarus/FreePascal
function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,
Directory: PAnsiChar; ShowCmd: Integer): HINST; stdcall; function ShellExecute; external shell32 name 'ShellExecuteA';
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:
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.
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 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; |
AW: Neustart der Applikation aus Stabilitätsgründen...
Zitat:
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. |
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