Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi variabeln verbinden (https://www.delphipraxis.net/31926-variabeln-verbinden.html)

blah 15. Okt 2004 17:48


variabeln verbinden
 
Hallo DP,

Ich steh gerade auf dem schlauch und habe ein kleines Problem und zwar
will ich die hosts Datei in meinem kleinen Programm bearbeiten.
ich habe
Delphi-Quellcode:
function ExpandEnvStr(const szInput: string): string;
const
  MAXSIZE = 32768;
begin
  SetLength(Result,MAXSIZE);
  SetLength(Result,ExpandEnvironmentStrings(pchar(szInput),
    @Result[1],length(Result)));
end;
hier im forum gefunden und will jetzt folgendes anstellen:
Delphi-Quellcode:
  WINDIR := ExpandEnvStr('%windir%'); // Funktion hier der DP entnommen :-)
  ETCDIR := WINDIR + '\system32\drivers\etc';
  HOSTSFILE := ETCDIR + '\hosts';
dies dient dem Zweck das ich auf WINDIR oder ETCDIR oder direkt auf die Datei HOSTSFILE zugreifen kann.
Die variabeln sind global deklariert (als String) und werden im FormCreate gesetzt jedoch funktioniert keine wie erwartet mit ausnahme vom WINDIR.

TIA

Gruber_Hans_12345 15. Okt 2004 18:05

Re: variabeln verbinden
 
wie macht sich dein "funktioniert nicht" bemerkbar ?

und eventuell den ganzen code, wo werden die variabeln gestzt und wo verwendet !

blah 15. Okt 2004 18:12

Re: variabeln verbinden
 
Ok als erstes den ganzen Code
Delphi-Quellcode:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Memo2: TMemo;
    Label1: TLabel;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  WINDIR, ETCDIR, HOSTSFILE: String;

implementation

{$R *.dfm}

function ExpandEnvStr(const szInput: string): string;
const
  MAXSIZE = 32768;
begin
  SetLength(Result,MAXSIZE);
  SetLength(Result,ExpandEnvironmentStrings(pchar(szInput),
    @Result[1],length(Result)));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // C:\WINNT\system32\drivers\etc\hosts
  WINDIR := ExpandEnvStr('%windir%'); // Funktion existier hier aus DP
  ETCDIR := WINDIR + '\system32\drivers\etc';
  HOSTSFILE := ETCDIR + '\hosts';
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Close;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Lesen der Hosts Datei
  Memo1.Lines.Add('Windir: ' + WINDIR);
  Memo1.Lines.Add('etcdir: ' + ETCDIR);
  Memo1.Lines.Add('hostsfile: ' + HOSTSFILE);
end;

end.
und es macht sich so bemerkbar:
Code:
Windir: C:\WINNT
etcdir: C:\WINNT
hostsfile: C:\WINNT
jedoch würde ich dies erwarten:
Code:
Windir: C:\WINNT
etcdir: C:\WINNT\system32\drivers\etc
hostsfile: C:\WINNT\system32\drivers\etc\hosts
Danke

Gruber_Hans_12345 15. Okt 2004 18:18

Re: variabeln verbinden
 
Da liefert ExpandEnvStr einen falschen String zurück (hat wahrscheinlich hinten nach einen binary 0 dran) ... warum ? keine Ahnung, im Source siehts gut aus

probier mal (nur testweise, keine Endlösung .....)
Delphi-Quellcode:
function ExpandEnvStr(const szInput: string): string;
const
  MAXSIZE = 32768;
begin
  SetLength(Result,MAXSIZE);
  SetLength(Result,ExpandEnvironmentStrings(pchar(szInput),
    @Result[1],length(Result)));
  setlength(Result, strlen(PChar(Result)));
end;

blah 15. Okt 2004 18:21

Re: variabeln verbinden
 
Danke Gruber_Hans_12345 jetzt geht es :-D

Gruber_Hans_12345 15. Okt 2004 18:23

Re: variabeln verbinden
 
OK, dann sollte es so ohne Probleme funktionieren :

Delphi-Quellcode:
function ExpandEnvStr(const szInput: string): string;
const
  MAXSIZE = 32768;
begin
  SetLength(Result,MAXSIZE);
  SetLength(Result,ExpandEnvironmentStrings(pchar(szInput),
    @Result[1],length(Result))-1);
end;

blah 15. Okt 2004 18:26

Re: variabeln verbinden
 
Nochmals Danke vielmals dieser Funktioniert Perfekt


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:22 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