调用IniFile.Create触发EAccessViolation异常,求问题排查方向
解决TIniFile创建时触发的EAccessViolation异常
你的问题出在变量名和类名重名上。Delphi对标识符大小写不敏感,你声明的变量IniFile和TIniFile类(引入IniFiles单元后,通常可直接用IniFile指代TIniFile)产生了冲突。当你调用IniFile.Create时,编译器会将其解析为访问未初始化的变量IniFile的Create方法——此时变量是野指针,直接触发EAccessViolation异常。
修正方法有两种,任选其一即可:
方案1:修改变量名(推荐)
将变量名改为与类名不重复的名称,比如MyIniFile:
var MyIniFile: TIniFile; IniFileName : String; IniFileName := ChangeFileExt(Application.ExeName, '.ini') ; MyIniFile := TIniFile.Create(IniFileName);
方案2:明确指定类全名
如果要保留变量名,调用构造函数时明确写出类的全名TIniFile,避免编译器混淆:
var IniFile: TIniFile; IniFileName : String; IniFileName := ChangeFileExt(Application.ExeName, '.ini') ; IniFile := TIniFile.Create(IniFileName);
核心就是避免命名冲突,让编译器能正确识别你要调用的是类的构造函数,而非未初始化变量的成员。
内容的提问来源于stack exchange,提问作者Mawg
相关产品推荐
相关产品推荐

