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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Access Violation на objXMLDoc.async := False, Почему? 
V
    Опции темы
navodri
Дата 22.8.2010, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Немогу понять почему возникает Access Violation в строке  objXMLDoc.async := False; ? Может, CreateOLEObject надо как-то закрывать (хотя как?), потому что я обращаюсь к нему постоянно?.. 
 Может, из-за потока, в котором я использую данных фрагмент кода? Не знаю.. Прошу помощи?

Код

...
var
 objXMLDoc: IXMLDOMDocument;
begin
 objXMLDoc := CreateOLEObject('Microsoft.XMLDOM')as IXMLDOMDocument;
 objXMLDoc.async := False; //здесь возникает Access Violation
 objXMLDoc.load('http://www.site.com/file.xml');
 ...

PM MAIL WWW   Вверх
cat512
Дата 22.8.2010, 18:40 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Потому что объект у тебя не создан.
Твой код говорит о том что ты хочеш заюзать объект поддерживающий дуальные интерфейсы.
Если ты етого не знаеш, то лучше исполбзовать что то одно; либо Диспинтерфейсы либо наследники от IUnknown.
ПОЭТОМУ правильнее писать так:

Код

uses msxml, msxmldom
interface
implementation
//Если наследник IDispatch
procedure TestXml;
var
  vObj: oleVariant;
begin
  vObj := null;
  vObj := createOleObject('Microsoft.XmlDom');
  if VarIsNull(vObj) then begin ShowMesage('не смогли создать объект'); exit; end;
  vObj.async := false;
end;

//Если наследник IUnknown
procedure TestXml;
var
  vObj: IXmlDomDocument;;
begin

  vObj := createDomDocument
  Assert(Assigned(vObj), 'не смогли создать объект') exit; end;
  vObj.async := false;
end;


Добавлено @ 18:44
Самый простой вариант использовать функцию CreateDomDocument, в модуле msxmldom. ей не нужны параметры и она поддерживает версионность.

Добавлено @ 18:49
!!!В ПОТОКЕ ПЕРЕД ИСПОЛЬЗОВАНИЕМ СОМ-ОБЪЕКТА ОБЯЗАТЕЛНО ВЫЗОВИ Coinitialize(NIL), А ПЕРЕД УНИЧТОЖЕНИЕМ CoUninitialize, для того чтобы поток зашёл в аппартмент


M
THandle
Модератор: используйте подсветку кода!

PM MAIL   Вверх
navodri
Дата 23.8.2010, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо! Coinitialize(NIL) и CoUninitialize - оказались очень полезными штуками... 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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