AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Viele PChars in einem Record

Ein Thema von pszopp · begonnen am 10. Jan 2006 · letzter Beitrag vom 10. Jan 2006
Antwort Antwort
pszopp

Registriert seit: 7. Sep 2005
Ort: Alsdorf
95 Beiträge
 
Delphi 2010 Professional
 
#1

Viele PChars in einem Record

  Alt 10. Jan 2006, 09:40
Hallo Delphi-Fans,

ich habe ein Problem mit einem Record, in dem viele Variablen vom Typ PChar gespeichert werden sollen.
Der Record ist wie folgt aufgebaut:

Delphi-Quellcode:
  TUpdateInfo = RECORD
    ApplicationTitle : PChar;
    ApplicationName : PChar;
    ApplicationPath : PChar;
    ApplicationExeName : PChar;
    UpdatePath : PChar;
    SourceURL : PChar;
    CurrentVersion : TVersion;
    LangId : Integer;
  END;
In einem Testprogramm erzeugt die Methode GetInfo eine Instanz des Typs TUpdateInfo:
Delphi-Quellcode:
function TForm1.GetInfo:TUpdateInfo;
begin
  Result.ApplicationExeName := PChar(Application.ExeName);
  Result.ApplicationName := PChar('Update-Test');
  Result.ApplicationPath := PChar(ExtractFileDir(Application.ExeName));
  Result.ApplicationTitle := PChar(Application.Title);
  Result.CurrentVersion := CreateVersion(2, 5, 0);
  Result.LangId := langGer;
  Result.SourceURL := PChar('http://intranet.tng.ad/DB/UPDATE/Test/');
  Result.UpdatePath := PChar(GetTempPath);
end;
Wenn ich diese Methode debugge, steht in jedem Teil von Result der richtige Wert.
In der Variable, der dieses Result zugewiesen wird, stehen fehlerhafte Werte:
Delphi-Quellcode:
var Info : TUpdateInfo;
begin
  Screen.Cursor:=crHourGlass;

  Info := GetInfo;
In diesem Fall würde in Info etwas falsches stehen.
Mit scheint es, als ob es beim Zuweisen des Inhalts für Info irgendeinen Fehler gibt.
Falls sich jemand gut mit PChars auskennt und eine Lösung / einen Fehler findet,
wäre ich dankbar.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Viele PChars in einem Record

  Alt 10. Jan 2006, 09:50
Zitat:
Result.ApplicationExeName := PChar(Application.ExeName);
[...]
Result.ApplicationPath := PChar(ExtractFileDir(Application.ExeName));
Hier geht es schon mit dem Fehler los. Du weist dem Feld einen PChar auf eine (vom Compiler generierte) lokale Variable zu. Wenn die Funktion dann verlassen wird, ist die lokale Variable natürlich weg und dein PChar zeigt ins Nirwana.
  Mit Zitat antworten Zitat
pszopp

Registriert seit: 7. Sep 2005
Ort: Alsdorf
95 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Viele PChars in einem Record

  Alt 10. Jan 2006, 10:06
Ok, verstehe,
aber wie behebe ich diesen Fehler.
  Mit Zitat antworten Zitat
pszopp

Registriert seit: 7. Sep 2005
Ort: Alsdorf
95 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Viele PChars in einem Record

  Alt 10. Jan 2006, 12:26
Ich habe mittlerweile selber eine Lösung gefunden.
Die poste ich mal, falls irgendwann auch andere ein solches Problem haben:

Mit "StrNew" kann man einen PChar so kopieren, dass er auch nach dem Methodendurchlauf
zur Verfügung steht, und der Zeiger auf korrekten Inhalt zeigt.

Damit der Speicher nicht zugeschrieben wird, muss der Zeiger jedoch irgendwann mit
"StrDispose" freigegeben/gelöscht werden.
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#5

Re: Viele PChars in einem Record

  Alt 10. Jan 2006, 12:28
Du könntest ein array of Char nehmen, dann hast du dieses Problem nicht und du kannst sicher sein, dass der Speicher wieder freigegeben wird, wenn die Variable ihren Gültigkeitsbereich verlässt.
  Mit Zitat antworten Zitat
pszopp

Registriert seit: 7. Sep 2005
Ort: Alsdorf
95 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Viele PChars in einem Record

  Alt 10. Jan 2006, 13:50
Können "Char Arrays" den auch bei Dlls verwendet werden?

Ich hatte nämlich vor, einer Dll Informationen via
TUpdateInfo zu schicken.

Auf jeden Fall klappt es im Moment
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:36 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