Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
15-1289510991
Юрий
2010-11-12 00:29
2011.02.20
С днем рождения ! 12 ноября 2010 пятница


2-1291178663
Василич
2010-12-01 07:44
2011.02.20
Обработчик ошибок TWordApplication


2-1291208415
cross
2010-12-01 16:00
2011.02.20
работа с xml


2-1290760671
Scott Storch
2010-11-26 11:37
2011.02.20
out- параметр интерфейс


2-1290689216
FIL-23
2010-11-25 15:46
2011.02.20
Передача edita в собственную процеду.