![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TXMLDocument и ошибка Microsoft MSXML is not installed
Akella-M © (2013-04-18 13:04:00)В потоке обращаюсь через 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
Ega23 (2013-04-18 21:13:00) [1]
> Кто будет гуглить эту тему - возможно Вам поможет инфа,
> что в потоке 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 и говорит.
От потока не зависит, в главном будет то же самое.
Медвежонок Пятачок (2013-04-18 20:29:00) [2]что в потоке TXMLDocument.Create нельзя указывать с nil,
Можно.
Хоть в потоке хоть как. Просто надо хелп читать.
Akella-M (2013-04-18 20:20:00) [3]Помогло, спасибо.
Кто будет гуглить эту тему - возможно Вам поможет инфа, что в потоке TXMLDocument.Create нельзя указывать с nil, укажите хотябы application:
TXMLDocument.Create(Application);
Иначе будет Invalit Pointer Operation
Ega23 (2013-04-18 16:57:00) [4]CoInitialize, CoUninitialize, TXMLDocument.Create(nil) и XML := nil вынести в Execute.
Akella-M (2013-04-18 16:17:00) [5]Не очень понял, но реализовал аналогичную идея используя IXMLDocument2
Правда 4 потока выдают производительность HTTP метод POST + SQLQuery запрос Insert за три секунды.
Не пойму почему так долго, средняя скорость аналогичной операции без IXMLDocument2 занимала 1 секунду на 120 записей.
Может тормозить изза IXMLDocument2?
Медвежонок Пятачок (2013-04-18 14:08:00) [6]все стереть и переписать.
экземпляр создается в одном потоке, коуинит делается в том же, а используется все это в другом потоке.