![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Кто найдёт ошибку(ки) в этом коде? [D6, WinXP]
^Sanya © (2002-11-09 14:19:00)ри обращении к
Base.StringTables[0].Cells[0,0]ошибок не возникает, но после обращении к другим ячейкам и их удачногочтения (перед Destroy), возникает "Invaalid pointer operation".
Где-то утечка памяти???
procedure TForm1.Button1Click(Sender: TObject);
var
Base: TBase;
begin
Base := TBase.Create(ExtractFilePath(Application.ExeName) + "test.ini");
ShowMessage(Base.StringTables[0].Cells[0,0]);
ShowMessage(Base.StringTables[0].Cells[0,1]);
ShowMessage(Base.StringTables[0].Cells[1,0]);
Base.Destroy;
end;
//код модуля используемых классов
type
TBase = class;
TStringTable = class
private
FFileName: string;
FName: string;
FColCount,
FRowCount: Integer;
procedure SetCell(ACol, ARow: Integer; const Value: string);
function GetCell(ACol, ARow: Integer): string;
public
property Name: string read FName;
property ColCount: Integer read FColCount;
property RowCount: Integer read FRowCount;
property Cells[Col, Row: Integer]: string read GetCell write SetCell;
constructor Create(ATableName: string);
destructor Destroy;
end;
TBase = class
private
FStringTables: array[Byte] of TStringTable;
FStringTableCount: Byte;
procedure SetTableNames;
function GetStringTable(i: Byte): TStringTable;
protected
FFileName: string;
public
property StringTables[index: Byte]: TStringTable read GetStringTable;
property FileName: string read FFileName;
property StringTableCount: Byte read FStringTableCount;
constructor Create(AFileName: string);
destructor Destroy;
end;
implementation
uses
CryptInt;
{ TTable }
constructor TStringTable.Create(ATableName: string);
var
basE: tbase;
begin
inherited Create;
FFileName := Base.FFileName;
FName := ATableName;
end;
destructor TStringTable.Destroy;
begin
inherited
end;
function TStringTable.GetCell(ACol, ARow: Integer): string;
var
IniFile: TIniFile;
begin
IniFile := TIniFile.Create(FFileName);
try
Result := DeCryptEx(IniFile.ReadString(FName, EnCryptEx(IntToStr(ACol) + "^"
+ IntToStr(ARow), CryptKey), ""), CryptKey);
finally
IniFile.Free
end;
end;
procedure TStringTable.SetCell(ACol, ARow: Integer; const Value: string);
var
IniFile: TIniFile;
begin
IniFile := TIniFile.Create(FFileName);
try
IniFile.WriteString(FName, EnCryptEx(IntToStr(ACol)+"^"+IntToStr(ARow),
CryptKey), EnCryptEx(Value, CryptKey));
finally
IniFile.Free
end;
end;
{ TBase }
constructor TBase.Create(AFileName: string);
begin
if not FileExists(AFileName) then
if FileCreate(AFileName) = -1 then
raise Exception.Create(Format("
^Sanya (2002-11-09 17:58:00) [1]не в этом суть...
ShowMessage(Base.StringTables[0].Cells[0,0]);- это просто проверка чтения свойств...
Так как проект в разработке, только сейчас пишу св-ва, обозначающие границы соответствующих массивов...
Эх... где же Юрий Зотов... Он бы мне всё как следует расписал...
P.S.: На форум я хожу только для того, чтобы спрашивать саамые нееезнакомые мне вещи. (То есть если судить о моих знаниях по мессагам в форуме, то я полный ноль:) ) Говорить(или спрашивать) о том, что я и так знаю, IMHO, бессмысленно. Пойду-ка в книжках пороюсь...
Anatoly Podgoretsky (2002-11-09 17:39:00) [2]Да хотябы что [0].[0,0] может не существовать
^Sanya (2002-11-09 17:16:00) [3]
> Anatoly Podgoretsky © (09.11.02 15:20)
а что не так с
> ShowMessage(Base.StringTables[0].Cells[0,0]);
???
Anatoly Podgoretsky (2002-11-09 15:20:00) [4]Да вот хотя бы эта
ShowMessage(Base.StringTables[0].Cells[0,0]);
Николай Быков (2002-11-09 15:11:00) [5]
> Anatoly Podgoretsky © (09.11.02 15:06)
Прочитайте еще раз сабж ветки. там не ограничивается число ошибок
Anatoly Podgoretsky (2002-11-09 15:06:00) [6]Нет нужды, требоввлось найти только одну ошибку, а тут их много
Николай Быков (2002-11-09 14:53:00) [7]
> Anatoly Podgoretsky © (09.11.02 14:52)
А можно подробнее?
Anatoly Podgoretsky (2002-11-09 14:52:00) [8]Это сплошная ошибка
^Sanya (2002-11-09 14:20:00) [9]первую уже нашёл: "ри" = "При" :)