Я всегда получаю нарушение прав доступа, когда пытаюсь использовать DocumentElement
из XMLDocument
. Я создаю XMLDocument
на основании существования какого-то файла.
Сообщение об ошибке
Project project1.exe вызвал класс исключения EAccessViolation с сообщением «Нарушение доступа по адресу 0047B152 в модуле project1.exe». Чтение адреса B1D59357 »
Мой код
unit XMLBase;
interface
uses
SysUtils, xmldom, XMLIntf, XMLDoc, Forms;
type
TXMLbase = class
private
{ Private declarations }
public
XMLDocument1: TXMLDocument;
root: IXMLNode;
constructor Create;
end;
var
fn: string;
implementation
constructor TXMLbase.Create;
begin
fn := ChangeFileExt(Application.ExeName, '.xml');
XMLDocument1 := TXMLDocument.Create(nil);
XMLDocument1.Options := [doNodeAutoIndent];
XMLDocument1.Active := False;
//optional, is used to indent the Xml document
if FileExists(fn) then
begin
XMLDocument1.LoadFromFile(fn);
XMLDocument1.Active:= True;
root := XMLDocument1.DocumentElement; //<<--- Access Voilation
end
else
begin
XMLDocument1.Active := False;
XMLDocument1.XML.Text := '';
XMLDocument1.Active := True;
root := XMLDocument1.AddChild('Settings');
end;
XMLDocument1.SaveToFile(fn);
end;
end.
Нарушения доступа возникают из-за неправильной инициализации объекта или указателей. Означает ли это, что XMLDocument
не инициализируется?
Invalid pointer operation
без определенной точки останова после завершения работы конструктора. - person Jerry Dodge   schedule 25.12.2012INI File
работать для того, что вам нужно? XML - это немного, если вам просто нужно сохранить несколько строк, но он отлично подходит, когда у вас есть сложная группа настроек. - person Jerry Dodge   schedule 25.12.2012