Текущий архив: 2011.02.20;
Скачать: CL | DM;
Вниз
out- параметр интерфейс Найти похожие ветки
← →
Scott Storch (2010-11-26 11:37) [0]Столкнулся с очередной проблемой. В методе pack_get_hdr класса Thdr_analyzer в качестве out-параметра используется интерфейс IXMLDOMDocument. При попытке вызова какого-либо его метода внутри метода pack_get_hdr вылетает AccessViolation (Интерфейс заранее инициализирую, при передаче его уже в методе pack_get_hdr он почему-то = nil). В чем проблема? Ниже пример:
unit Unit14;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ZIPForge, msxml;
type
TTestForm = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declaration }
public
{ Public declaration }
end;
Thdr_analyzer = class(TObject)
var
{ }
FHdr: IXMLDOMDocument;
{ }
procedure pack_get_hdr(APack: TZIPForge; out Apack_hdr: IXMLDOMDocument);
public
constructor Create(const Afile_name: string);
destructor Destroy; override;
end;
var
TestForm: TTestForm;
implementation
{$R *.dfm}
{ Thdr_analyzer }
constructor Thdr_analyzer.Create(const Afile_name: string);
var
Pack: TZIPForge;
begin
Pack := TZIPForge.Create(nil);
try
Pack.FileName := Afile_name;
try
Pack.OpenArchive;
except
raise Exception.Create(Format("Пакет обновления "%s" поврежден или имеет неизвестный формат.",
[Afile_name]));
end;
Fhdr := CoDOMDocument.Create;
pack_get_hdr(Pack, FHdr);
finally
Pack.Free;
end;
end;
destructor Thdr_analyzer.Destroy;
begin
FHdr := nil;
inherited;
end;
procedure Thdr_analyzer.pack_get_hdr(APack: TZIPForge;
out Apack_hdr: IXMLDOMDocument);
var
S: string;
begin
try
APack.ExtractToString("hdr.xml", S);
except
raise Exception.Create("Не удалось извлечь заголовок пакета обновления.");
end;
// -> AccessViolation
Assert(Apack_hdr.loadXML(S), "Не удалось загрузить заголовок пакета обовления.")
end;
{ TTestForm }
procedure TTestForm.FormCreate(Sender: TObject);
var
ha: Thdr_analyzer;
begin
ha := Thdr_analyzer.Create("D:\Хлам\Updates\upd_659_to_661.zip");
try
finally
ha.Free;
end;
end;
end.
← →
Anatoly Podgoretsky © (2010-11-26 11:42) [1]Справка!
> An out parameter, like a variable parameter, is passed by
> reference. With an out parameter, however, the initial value
> of the referenced variable is discarded by the routine it
> is passed to. The out parameter is for output only; that
> is, it tells the function or procedure where to store output,
> but doesn"t provide any input.
← →
Scott Storch (2010-11-26 11:45) [2]можно в двух словах на русском, что это значит, сижу с телефона нет возможности воспользоваться переводчиком.
← →
RWolf © (2010-11-26 11:46) [3]translate.google.com же.
← →
han_malign (2010-11-26 12:01) [4]
> в двух словах на русском
- выходной параметр
← →
Anatoly Podgoretsky © (2010-11-26 12:14) [5]Вот перевод переводчиком
> Параметр out, как параметра переменной, передается по
> ссылка. С параметром out, однако начальное значение
> ссылочной переменной отбрасывается от обычной она
> передается. Выходной параметр для вывода только;
> Это, он указывает функции или процедуры, где для хранения продукции,
> но не предоставляет какие-либо материалы.
← →
Anatoly Podgoretsky © (2010-11-26 12:14) [6]> han_malign (26.11.2010 12:01:04) [4]
Уложился в два слова.
← →
Scott Storch (2010-11-26 12:18) [7]Все ясно. Спасибо
Страницы: 1 вся ветка
Текущий архив: 2011.02.20;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.009 c