Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> out-параметр интерфейс, AccessViolation 
V
    Опции темы
NieL
Дата 26.11.2010, 11:38 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 214
Регистрация: 10.2.2008

Репутация: 1
Всего: 1



Столкнулся с очередной проблемой. В методе 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.

PM MAIL   Вверх
CodeMonkey
Дата 26.11.2010, 13:41 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Отжёг.

Никаких мыслей не возникает по поводу того, что out - выходной параметр?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
cat512
Дата 26.11.2010, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 7
Всего: 15



Потоков не используется?
PM MAIL   Вверх
Alexeis
Дата 26.11.2010, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



cat512, он читает значение из out параметра, хотя по документации значение параметра полученного как out не определено. Все равно что неинициализировнная переменная.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
cat512
Дата 26.11.2010, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 7
Всего: 15



Цитата(Alexeis @ 26.11.2010,  16:21)
cat512, он читает значение из out параметра, хотя по документации значение параметра полученного как out не определено. Все равно что неинициализировнная переменная.

Sorry, не внимательно прочитал пост
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0488 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.