Внутренние ошибки - это, в общем, внутренние ошибки в компиляторе или компоновщике. На этот раз похоже на компилятор. Число является просто указанием людям, которые на самом деле написали компилятор. Что это означает, не задокументировано, и это то, что на самом деле никогда не должно происходить, другими словами, это ошибка в компиляторе . Если это происходит, вы можете только догадываться, где или почему это происходит, и пытаться модифицировать ваш код, пока он не исчезнет. Это нелегко и может расстраивать, но это единственное, что вы можете сделать.
Я предполагаю, что это связано с тем, что код использует индексированные свойства с геттерами и сеттерами, определенными в классе предков. Я думаю, вы могли бы написать свои собственные методы получения и установки и вызывать унаследованные методы получения с указанным индексом. Попробуйте это:
TRootsXml = class(TGpXmlDocList)
private
fRows: TRows;
function GetVer: WideString;
procedure SetVer(const Value: WideString);
function GetRootFile ... etc..
public
constructor Create; reintroduce;
destructor Destroy; override;
property Ver: WideString read GetVer write SetVer;
property RootFile: WideString read GetRootFile write SetRootFile;
property Rows: TRows read fRows;
end;
function TRootsXml.GetVer: WideString;
begin
Result := GetXMLAttrPropWide(0);
end;
procedure TRootsXml.SetVer(const Value: WideString);
begin
SetXMLAttrPropWide(0, Value);
end;
// etc... similar code for GetRootFile and SetRootFile, but with index 1.
Не уверен, что это работает, поскольку у меня больше не установлен Delphi 7, но, пожалуйста, попробуйте и сообщите, что случилось.
Полагаю, исходный код предназначался для использования в более высокой версии. Это не объясняет внутреннюю ошибку (как я уже сказал, это ошибки в компиляторе), но объясняет, почему он не компилируется должным образом, так как я предполагаю, что код был протестирован, но, очевидно, не в Delphi 7.