Autor Beitrag
the-chosen1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 05.04.10 17:25 
Betrifft: INI
Hey Leute ;)
Habe folgendes problem. Ich möchte beim Start meines Programmes eine Datei laden. Allerdings bekomme ich immer einen Accessviolation Error.
Was ich eigentlich machen will ist, dass das Programm beim Start eine Ini datei läd.
Wie bekomm ich nun am einfachsten diese Zugriffsverletzung weg?
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1083
Erhaltene Danke: 53

Win XP, Win7
Delphi 7 Enterprise, XE
BeitragVerfasst: Mo 05.04.10 17:29 
Welches Windows? Wo liegt die ini? ein bischen mehr infos währe nicht schlecht!
Gruss ALf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Moderator
Beiträge: 8306
Erhaltene Danke: 349

Win XP, Win 7
D7 PE, RAD Studio 2009 Professional
BeitragVerfasst: Mo 05.04.10 17:34 
Hallo und :welcome: in der Entwickler-Ecke,

Eine Access-Violation deutet darauf hin, dass du ein Objekt nicht (korrekt) erzeugt hast, bevor du darauf zugreifst. Zeig mal den entsprechenden Code. Ich tippe mal blind auf ein MyInifile.Create, wo ein MyInifile := TIniFile.Create stehen sollte ;-).

_________________
Oel ngati kameie.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
the-chosen1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 05.04.10 17:35 
user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
Welches Windows? Wo liegt die ini? ein bischen mehr infos währe nicht schlecht!
Gruss ALf


Windows XP 32bit
Delphi 7 Personal
Die ini liegt im Programmverzeichnis.
Ansonsten hab ich das problem aber schon immer. Ich kann dateien z.b. In textfelder laden, wenn ich einen Butten drücke, wenn ich aber über Form1.Create die Datei lade, kommt dieser Access violation error.
Auch wenn ich über Form1.Create den Button ausführe
Also
Button10.click; kommt der Error

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

user profile iconGausi hat folgendes geschrieben Zum zitierten Posting springen:
Hallo und :welcome: in der Entwickler-Ecke,

Eine Access-Violation deutet darauf hin, dass du ein Objekt nicht (korrekt) erzeugt hast, bevor du darauf zugreifst. Zeig mal den entsprechenden Code. Ich tippe mal blind auf ein MyInifile.Create, wo ein MyInifile := TIniFile.Create stehen sollte ;-).


Ja ich habe ein MyInifile.Create da stehen ;)
Wie sieht es denn korekt aus?

ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm3.FormCreate(Sender: TObject);
var
TheMStream : TMemoryStream;
Zero : char;
ini: Tinifile;
begin
ini:=TIniFile.Create('.\settings.ini');
form11.HotKey1.HotKey:= TextToShortcut(ini.ReadString('Hotkeys','Play',''));
form11.HotKey2.HotKey:= TextToShortcut(ini.ReadString('Hotkeys','Next',''));
ini.free;
end;
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1083
Erhaltene Danke: 53

Win XP, Win7
Delphi 7 Enterprise, XE
BeitragVerfasst: Mo 05.04.10 17:58 
was soll der Punkt
ausblenden Delphi-Quelltext markieren
1:
ini:=TIniFile.Create('.\settings.ini');

da drin?
Das ist doch nicht PHPcode :wink:
Und wenn sie im Exe ordner liegt, ist es trotzdem nicht gut, auf verdacht die ini so zu laden!
Besser ist,
ausblenden Delphi-Quelltext markieren
1:
ini:=TIniFile.Create(ExtractFilePath(ParamStr(0)) + '\settings.ini');

ist da sicherer.
Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
the-chosen1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 05.04.10 18:09 
user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
was soll der Punkt
ausblenden Delphi-Quelltext markieren
1:
ini:=TIniFile.Create('.\settings.ini');

da drin?
Das ist doch nicht PHPcode :wink:
Und wenn sie im Exe ordner liegt, ist es trotzdem nicht gut, auf verdacht die ini so zu laden!
Besser ist,
ausblenden Delphi-Quelltext markieren
1:
ini:=TIniFile.Create(ExtractFilePath(ParamStr(0)) + '\settings.ini');

ist da sicherer.
Gruss Alf



Okay, vielen dank für den tipp ;)
Leider hat das nichts an meinem Problem geändert, da der Fehler immer noch kommt :(
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Moderator
Beiträge: 8306
Erhaltene Danke: 349

Win XP, Win 7
D7 PE, RAD Studio 2009 Professional
BeitragVerfasst: Mo 05.04.10 18:12 
Wann wird der Code denn genau aufgerufen? Wenn das OnCreate einer Form aufgerufen wird, sind möglicherweise einige andere Formen noch nicht erzeugt. Wenn der Fehler beim ButtonClick nicht mehr kommt, könnte das an so etwas liegen...

_________________
Oel ngati kameie.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
the-chosen1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 05.04.10 18:15 
user profile iconGausi hat folgendes geschrieben Zum zitierten Posting springen:
Wann wird der Code denn genau aufgerufen? Wenn das OnCreate einer Form aufgerufen wird, sind möglicherweise einige andere Formen noch nicht erzeugt. Wenn der Fehler beim ButtonClick nicht mehr kommt, könnte das an so etwas liegen...

Unmittelbar bei dem Start des Programms.
Ich hab insgesamt 11 formen. Es werden aber nur 2 gezeigt.
Ich füre den Script bei Form1.OnCreate aus. Da Form1 meine MainForm ist also sofort.
Aber wie könnte ich denn das problem umgehen?
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Luckie
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 11830
Erhaltene Danke: 162

WindowsXP Professional SP2
BDS2006, VS C++ Express, Eclipse (Java), Flex (Flash, AS)
BeitragVerfasst: Mo 05.04.10 18:15 
user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
was soll der Punkt
ausblenden Delphi-Quelltext markieren
1:
ini:=TIniFile.Create('.\settings.ini');

da drin?
Das ist doch nicht PHPcode :wink:

Augen auf. Der Punkt gehört zur Zeichenkette und repräsentiert das aktuelle Arbeitsverzeichnis.

_________________
Gruß Michael
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Moderator
Beiträge: 8306
Erhaltene Danke: 349

Win XP, Win 7
D7 PE, RAD Studio 2009 Professional
BeitragVerfasst: Mo 05.04.10 18:20 
user profile iconthe-chosen1 hat folgendes geschrieben Zum zitierten Posting springen:
Unmittelbar bei dem Start des Programms.
Ich hab insgesamt 11 formen. Es werden aber nur 2 gezeigt.
Ich füre den Script bei Form1.OnCreate aus. Da Form1 meine MainForm ist also sofort.
Aber wie könnte ich denn das problem umgehen?


Greifst du denn auf eine andere Form zu? In dem Code oben, wird im Create von Form3 auf Form11 zugegriffen, die dann wahrscheinlich noch nicht da sein dürfte.

Umgehung des Problems: Z.B. die Ini offen lassen und im Create der anderen Formen auch darauf zugreifen. Oder die Daten aus der Ini in eine geeignete Struktur lesen (die dann auch für einen eventuellen Einstellungsdialog genutzt werden kann) und diese Struktur beim Create der einzelnen Forms verwenden. Oder jede Form holt sich die Daten selbst aus der Inidatei. Oder du packst das ins OnShow der Form und merkst dir danach, dass du das einmal getan hast, damit das nicht nochmal durchgeführt werden. ...

_________________
Oel ngati kameie.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
the-chosen1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 05.04.10 18:29 
Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Ah VIELEN dank!
Ja stimmt... Form11 wird ja auch beim start erstellt, also kann ich einfach den Script in Form11.OnCreate reinschreiben ;)
Aber was meinst du mit die ini einfach offen lassen?
ini.free;
weg lassen und dafür in jede der verwendeten formen
ini:=TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'settings.ini');
reinschreiben?
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Moderator
Beiträge: 8306
Erhaltene Danke: 349

Win XP, Win 7
D7 PE, RAD Studio 2009 Professional
BeitragVerfasst: Mo 05.04.10 18:37 
Nein, man könnte die ini als Variable der Form definieren (also nicht lokal in der Create-Methode) und von den späteren Formen auf Form1.Ini zugreifen. Schön ist das aber nicht. ;-)
Besser wäre da schon, wenn du den Code aus Form1.Create einfach auf die einzelnen Formen aufteilst und jeweils nur den passenden Teil aus der Ini liest, also

ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TFormX.FormCreate(Sender: TObject);
var
ini: Tinifile;
begin
ini:=TIniFile.Create('.\settings.ini'); // Verbesserungen aus den anderen Postings hier einfügen ;#-)
try
lese Optionen für Form X
finally
ini.free;
end;
end;

_________________
Oel ngati kameie.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
the-chosen1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 05.04.10 18:40 
Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Okay viele dank ;) Schätze so wird das klappen ;)
Nur eine Frage noch: :D
Warum ist es nicht "schön" auf Form1.Ini zuzugreifen?
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1083
Erhaltene Danke: 53

Win XP, Win7
Delphi 7 Enterprise, XE
BeitragVerfasst: Mo 05.04.10 18:41 
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Augen auf. Der Punkt gehört zur Zeichenkette und repräsentiert das aktuelle Arbeitsverzeichnis.

Ooops, warum rufe ich das so nie auf :gruebel:
Egal, habe wenigstens was dazugelernt :wink:
Hat aber keine Lösung seines Probs gebracht.

@the-chosen1,
Ich teste auch trotzdem noch, ob die ini überhaupt da ist, bevor ich sie zum lesen öffne.
ausblenden Delphi-Quelltext markieren
1:
if not FileExists(ExtractFilePath(ParamStr(0)) + '\settings.ini') then

Kann ja auch sein das sie mal gelöschht wird.

Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3745
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mo 05.04.10 18:41 

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Luckie
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 11830
Erhaltene Danke: 162

WindowsXP Professional SP2
BDS2006, VS C++ Express, Eclipse (Java), Flex (Flash, AS)
BeitragVerfasst: Mo 05.04.10 19:48 
user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Augen auf. Der Punkt gehört zur Zeichenkette und repräsentiert das aktuelle Arbeitsverzeichnis.

Ooops, warum rufe ich das so nie auf :gruebel:

Weil du nicht weißt, welches das aktuelle Arbeitsverzeichnis ist. Deswegen soll man das auch nicht machen.

_________________
Gruß Michael
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren