Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.02.16;
Скачать: CL | DM;

Вниз

TXMLDocument и ошибка Microsoft MSXML is not installed   Найти похожие ветки 

 
Akella-M   (2013-04-18 13:04) [0]

В потоке обращаюсь через Syncrhonize к компоненту на форме - ошибка.
Создаю компонент в потоке - тоже ошибка.

constructor TSellerReceive.Create(Name: string);
begin

 CoInitialize(nil);
 inherited Create(True);
 FreeOnTerminate := True;
 GMS:=tmemorystream.Create;
 GCQ:=TSQLQuery.Create(nil);
 GXML:=txmldocument.Create(nil);

...

procedure TSellerReceive.Execute;
var
  ReceivedXMLText:TStringList;
begin

  ...
 
  GXML.XML.Text:=ReceivedXMLText.text;
  GXML.Active:=true;

  ...

тут выдает Exeption ту самую ошибку

Delphi XE3, Win7x64


 
Медвежонок Пятачок ©   (2013-04-18 14:08) [1]

все стереть и переписать.
экземпляр создается в одном потоке, коуинит делается в том же, а используется все это в другом потоке.


 
Akella-M   (2013-04-18 16:17) [2]

Не очень понял, но реализовал аналогичную идея используя IXMLDocument2

Правда 4 потока выдают производительность HTTP метод POST + SQLQuery запрос Insert за три секунды.

Не пойму почему так долго, средняя скорость аналогичной операции без IXMLDocument2 занимала 1 секунду на 120 записей.

Может тормозить изза IXMLDocument2?


 
Ega23 ©   (2013-04-18 16:57) [3]

CoInitialize, CoUninitialize, TXMLDocument.Create(nil) и XML := nil вынести в Execute.


 
Akella-M   (2013-04-18 20:20) [4]

Помогло, спасибо.

Кто будет гуглить эту тему - возможно Вам поможет инфа, что в потоке TXMLDocument.Create нельзя указывать с nil, укажите хотябы application:

TXMLDocument.Create(Application);

Иначе будет Invalit Pointer Operation


 
Медвежонок Пятачок ©   (2013-04-18 20:29) [5]

что в потоке TXMLDocument.Create нельзя указывать с nil,

Можно.
Хоть в потоке хоть как. Просто надо хелп читать.


 
Ega23 ©   (2013-04-18 21:13) [6]


> Кто будет гуглить эту тему - возможно Вам поможет инфа,
> что в потоке TXMLDocument.Create нельзя указывать с nil,
>  укажите хотябы application:
>
> TXMLDocument.Create(Application);
>
> Иначе будет Invalit Pointer Operation


var
 xml: IXMLDocument
begin
 xml := TXMLDocument.Create(nil);
end;

var
 xml: TXMLDocument;
begin
 xml := TXMLDocument.Create(SomeOwner);
 try

 finally
   xml.Free  
 end;
end;


Почувствуй разницу. В первом случае ты работаешь с ним, как с интерфейсом, при refCount=0 деструктор вызовется автоматически.
Во втором случае - как с невизуальным компонентом, который можно на форму или в дата-модуль кинуть.
Ты, скорее всего, объявил его именно как TXMLDocument, вызвал деструктор, а потом деструктор вызвался автоматом повторно при удалении ссылки, о чём исключение IPO и говорит.

От потока не зависит, в главном будет то же самое.



Страницы: 1 вся ветка

Текущий архив: 2014.02.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.007 c
2-1366032117
Cayenne
2013-04-15 17:21
2014.02.16
Ошибка при выгрузке файла


2-1365088308
Афонтий
2013-04-04 19:11
2014.02.16
Copy String to Char Array


2-1365677841
JohnKorsh
2013-04-11 14:57
2014.02.16
Автоматическое закрытие программы.


2-1366897985
HDC
2013-04-25 17:53
2014.02.16
отрисовка текста через TCanvas


2-1366275892
Akella-M
2013-04-18 13:04
2014.02.16
TXMLDocument и ошибка Microsoft MSXML is not installed