Здравствуйте, IONIX, Вы писали:
ION>Здравствуйте, wildwind, Вы писали:
W>>Надо вызывать CoInitializeEx/CoUninitialize.
ION>--------------------------------------------
ION>В этом случае DLL вообще перестаёт работать:
ION>CoInitializeEx(NIL, 2);
ION>XML:=Doc.Create(); // создание документа DOM
ION>В этом выходит с ошибками:
ION>CoInitializeEx(NIL, 2);
ION>XML :=CreateComObject(CLASS_DOMDocument) as IXMLDOMDocument;
ION>использую при открытии формы CoInitializeEx(NIL, 2);
ION>использую при закрытии формы CoUninitialize();
CoInitializeEx/CoUninitialize вы должны вызывать не в библиотеке, а в потоке который будет вызывать функции вашей библиотеки. При чем только один раз.
Для того чтобы было более понятно для чего это нужно почитайте статью:
Понимание подразделений COMАвтор(ы): Jeff Prosise
Дата: 22.02.2001
В этой статье подробно рассматриваются подразделения (apartments) в модели
COM. Автор описывает различные виды подразделений, показывает, каким образом
подразделения назначаются потокам и объектам, а также даёт ряд полезных
советов, которые позволят вам избежать ошибок при работе с подразделениями.
.
Для однопоточных програм на Delphi вам достаточно подключить в DPR-ку EXE-шки модуль
ComObj.pas