AGB  ·  Datenschutz  ·  Impressum  







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

INI-Dateien mit Non-VCL

Ein Thema von delphi_freak · begonnen am 20. Apr 2003 · letzter Beitrag vom 22. Apr 2003
Antwort Antwort
delphi_freak

Registriert seit: 5. Feb 2003
15 Beiträge
 
#1

INI-Dateien mit Non-VCL

  Alt 20. Apr 2003, 21:32
Hi habe ein kleines Problem. und zwar will ich einstellungen aus einer INI-DAtei lesen. Nur kommt wenn ich zwei oder mehr einstellungen auslese ein Runtime-Fehler. Ich mache das so (Teile aus Luckies TUT):
Delphi-Quellcode:
program test;

uses
  Windows, Messages;

var
  test1, test2 : PChar;

const
  Bufsize = 65535;
  IniFile = 'settings.ini';

function ExtractFilePath(const szFilename: string): string;
var
  i : integer;
begin
  if(pos(':',szFilename) > 0) or (pos('\',szFilename) > 0) then
    begin
      i := length(szFileName); while not(szFilename[i] in['\',':']) do dec(i);
      Result := copy(szFilename,1,i);
      if(szFilename[i] = ':') then Result := Result + '\';
    end
  else
    Result := '';
end;

begin
  {Einstellungen aus Ini}
  GetPrivateProfileString('Einstellungen', 'test1', nil, test1, BUFSIZE, pchar(ExtractFilePath(paramstr(0)) + IniFile));
  GetPrivateProfileString('Einstellungen', 'test2', nil, test2, BUFSIZE, pchar(ExtractFilePath(paramstr(0)) + IniFile));
 end.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 20. Apr 2003, 23:47
Moin Delphi Freak,

wenn ich mir das so ansehe, müsstest Du eigentlich beim ersten Aufruf schon eine Access Violation (Zugriffsverletzung, Error 5) bekommen.

Du deklarierst zwar eine Konstante für die Buffergrösse, aber der Buffer selber wird bei Dir nicht initialisiert (4. Parameter von GetPrivateProfileString).

Zum Verständnis:
Ein PChar (test1, test2) ist nichts weiter als ein Pointer, der als Zeiger auf einen nulltermnierten Ansistring angesehen wird, wie er in C üblich ist.
Wird kein Speicher reserviert (z.b. mit Getmem, AllocMem), so zeigt dieser Pointer irgendwo hin, so dass ein Zugriff auf den Speicher, auf den der Wert in test1 (bzw. test2) verweist i.d.R. einen Fehler produziert.
Da Daten an die Stelle gelesen werden sollen, auf die die Pointer zeigen, könnte es sogar sein, dass Teile des Programmes im Speicher überschrieben werden, was der Stabilität nicht gerade zu gute kommt
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3
  Alt 21. Apr 2003, 03:19
Ich bin mir eigentlich ziemlich sicher, dass das auch so nicht in meinen Tutorials steht. Wenn doch, dann muß ich deb Verantwortklichen Programmierer mal auf die Finger klopfen.

Und in eigener Sache: Bei konkreten Fragen (verständnis Fragen) kann auch in meinem Foruum gepostet werden.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
delphi_freak

Registriert seit: 5. Feb 2003
15 Beiträge
 
#4
  Alt 22. Apr 2003, 12:21
ok danke ich glaub ich werds hinbekommen
  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 13:43 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