![]() |
INI-Dateien mit Non-VCL
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. |
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 ;-) |
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. |
ok danke ich glaub ich werds hinbekommen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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