![]() |
AW: Parsen von EnvironmentPath
Nur so nebenbei erwähnt:
Also, wenn man bei
Delphi-Quellcode:
den Split auf dem
'%HOMEDRIVE%%HOMEPATH%'
Delphi-Quellcode:
ausgeführt hätte, dann würde man folgendes erhalten:
'%'
Code:
Die Variablen-Namen (natürlich ohne die umschließenden %-Zeichen) findet man also an den ungeraden Positionen wieder.
0: ''
1: 'HOMEDRIVE' 2: '' 3: 'HOMEPATH' Diese hätte man also auch leicht durchlaufen können und wieder zusammenbauen können. |
AW: Parsen von EnvironmentPath
Zitat:
Habe meine alte Version nicht gegengeprüft. Das ist dann natürlich falsch! Zitat:
Aber gut mir der neuen Version geht es jetzt ohne Probleme. Muss hier zwar auch parsen aber das ist so sicherer wie vorher. (High(Array)) Falls diese frage noch aufkommt was ist "@PATH@" @PATH@ ist immer der Arbeitspfad (WorkDir) in dem die Exe liegt wenn nichts anderes angegeben wurde. Ist also eine globale variable für alle Verknüpfungen. gruss und Danke nochmals |
AW: Parsen von EnvironmentPath
Mag sein, daß es hier nicht relevant ist, weil der Rückgabewert gleich weiterverarbeitet wird, aber zeigt der Result von ExpandEnvironment nicht auf eventuell ungültigen Stackspeicher? lpDest liegt doch als lokale Variable auf dem Stack und der wird beim Verlassen der Methode freigegeben. (Mal abgesehen davon, daß der Methodenaufruf mal eben so 64k vom Stack abzwackt.)
Delphi-Quellcode:
function TShortCut.ExpandEnvironment(EnvironmentPath: PWideChar): PWideChar;
var lpDest: array [0 .. 32768] of WideChar; begin result := ''; FillChar(lpDest, SizeOf(lpDest), 0); if ExpandEnvironmentStringsW(PWideChar(EnvironmentPath), lpDest, 32767) <> 0 then result := lpDest; end; |
AW: Parsen von EnvironmentPath
Zitat:
|
AW: Parsen von EnvironmentPath
Zitat:
Mal davon abgesehen das mein Array schon immens definiert ist. Könnte das Array dynamisch machen so wie von @Schokohase vorgeschlagen. gruss |
AW: Parsen von EnvironmentPath
Zitat:
Ich würde es mir da ganz einfach machen und statt dessen überall mit
Delphi-Quellcode:
arbeiten, wo es die Windows-API nicht ausdrücklich anders vorschreibt.
string
|
AW: Parsen von EnvironmentPath
Zitat:
Delphi-Quellcode:
gruss
function TShortCut.ExpandEnvironment(const EnvironmentPath: string): string;
var lpDest: array [0 .. 32768] of WideChar; begin result := ''; FillChar(lpDest, SizeOf(lpDest), 0); if ExpandEnvironmentStringsW(PWideChar(EnvironmentPath), lpDest, 32767) <> 0 then result := lpDest; end; |
AW: Parsen von EnvironmentPath
Nur so zur Info:
Bei
Delphi-Quellcode:
nimmt man
string
Delphi-Quellcode:
und den API Aufruf ohne A oder W am Ende.
PChar
|
AW: Parsen von EnvironmentPath
Zitat:
Wenn ich PChar in D2010 verwende wird PChar automatisch nach PWideChar gecastet. Also gebe ich direkt den richtigen Typ an ;) gruss |
AW: Parsen von EnvironmentPath
Delphi-Quellcode:
bei < D2009 ist
string
Delphi-Quellcode:
.
AnsiString
Delphi-Quellcode:
bei >= D2009 ist
string
Delphi-Quellcode:
.
UnicodeString
Delphi-Quellcode:
bei < D2009 ist
PChar
Delphi-Quellcode:
.
PAnsiChar
Delphi-Quellcode:
bei >= D2009 ist
PChar
Delphi-Quellcode:
.
PWideChar
Es wird also automatisch umgeschaltet, je nach Version (kann man im Source auch nachlesen). Nur wenn du immer Ansi/Unicode habe willst, aber dann ist
Delphi-Quellcode:
auf jeden Fall nicht korrekt
string
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 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