Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2014.02.16;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.002 c
2-1365333369
quart
2013-04-07 15:16
2014.02.16
gdi+ error


2-1362774705
vegarulez
2013-03-09 00:31
2014.02.16
сервер на IdTCPServer


15-1377698945
aka
2013-08-28 18:09
2014.02.16
вопрос знатокам JavaSccript


2-1366383198
Теркин
2013-04-19 18:53
2014.02.16
Как получить список форм проекта?


2-1365895775
Den
2013-04-14 03:29
2014.02.16
Undeclared identifier: IID_IUnknown





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский