Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi %..% durch Ergebnis von GetEnvironmentVariable(..) ersetzen (https://www.delphipraxis.net/74007-durch-ergebnis-von-getenvironmentvariable-ersetzen.html)

faux 26. Jul 2006 17:37


%..% durch Ergebnis von GetEnvironmentVariable(..) ersetzen
 
Hallo!

Ich hab einen String mit Umgebungsvariablen, die in Prozentzeichen eingeschlossen sind, in etwa %ProgramFiles%\Company\Product. Ich will nun alle %...% durch das Ergebnis der Funktion GetEnvironmentVariable(...) ersetzen. Gibts dafür ne vorgefertigte Funktion die mir alle ...s liefert, oder muss ich mir das selbst coden? Mir gehts nicht darum, dass ich es nicht selbst coden will, aber wenns das schon gibt, denke ich mal, dass das schneller ist, als das was ich da coden würde. ;)

Grüße
Faux

marabu 26. Jul 2006 17:49

Re: %..% durch Ergebnis von GetEnvironmentVariable(..) erset
 
Hallo Manuel,

vielleicht hilft dir das: klick

Grüße vom marabu

faux 26. Jul 2006 18:01

Re: %..% durch Ergebnis von GetEnvironmentVariable(..) erset
 
Zitat:

Zitat von marabu
Delphi-Quellcode:
function ExpandEnvStr(const szInput: string): string;
begin
  SetLength(Result, ExpandEnvironmentStrings(pChar(szInput), nil, 0));
  ExpandEnvironmentStrings(pChar(szInput), @Result[1], Length(Result));
end;

Danke! So gehts beinahe perfekt. Ein Problem hab ich noch. Wenn ich '%programfiles%\a' übergebe, wird mir C:\Program Files\a l zurückgegeben. Wo kommt das l her?! :gruebel:

Grüße
Faux

marabu 26. Jul 2006 18:09

Re: %..% durch Ergebnis von GetEnvironmentVariable(..) erset
 
Bei mir liefert die Funktion ein korrektes Ergebnis. Kannst du deinen problembehafteten Code isolieren und hier einstellen, damit ich das untersuchen kann?

marabu

Christian Seehase 26. Jul 2006 19:43

Re: %..% durch Ergebnis von GetEnvironmentVariable(..) erset
 
Moin Faux,

probier mal aus, ob es funktioniert, wenn Du es mit einer weiteren Variablen für das Ergebnis versuchst, und nicht direkt Result verwendest.
Ich hatte schon mal das Problem, dass die Verwendung von @StringVariable[1] sich anders verhielt, als ein PChar.
Mit letzterem hat es funktioniert, mit ersterem nicht, und das bei ansonsten gleicher Routine.
(Wenn ich jetzt eine Idee hätte, wie ich den Thread hier wiederfinden soll :gruebel:)

faux 26. Jul 2006 19:55

Re: %..% durch Ergebnis von GetEnvironmentVariable(..) erset
 
Ähm...
Also ich habe jetzt mal an meinem Programm weiter programmiert und wollte den Fehler am Ende beseitigen, jedoch tritt er jetzt nicht mehr auf. :gruebel:
Wäre aber trotzdem interessant zu wissen, ob der Fehler noch besteht, denke ich mir und erstellte ein neues leeres Projekt (es handelt sich übrigens um eine Konsolenanwendung) und probiere es nochmals, aber es tritt nichtmehr auf... :shock:

Naja, dann bedanke ich mich für den Code! :thumb:

Grüße
Faux

NACHTRAG:
Naja, einen "Fehler" habe ich noch gefunden:
Code:
+Fileversion is compatible.
~SourcePath:\\127.0.0.1\c$\licenses.lic .
~DestinationPath:C:\Program Files\Rasterex\RxView\licenses.lic .
+License file has been copied successfully.
Kann es sein, dass die Länge falsch berechnet wird? Der Punkt wurde unmittelbar nach dem Funktionsaufruf ausgegeben, jedoch sind da ein paar Leerzeichen....

marabu 26. Jul 2006 20:48

Re: %..% durch Ergebnis von GetEnvironmentVariable(..) erset
 
Ich habe den Fehler nachvollziehen können - hier der korrigierte Code:

Delphi-Quellcode:
function ExpandEnvStr(const szInput: String): String;
begin
  SetLength(Result, ExpandEnvironmentStrings(pChar(szInput), nil, 0));
  ExpandEnvironmentStrings(pChar(szInput), @Result[1], Length(Result));
  Result := StrPas(@Result[1]);
end;
Gute Nacht

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz