![]() |
|
|
![]()
|
|
| Windhunter |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 7.7.2006 Репутация: нет Всего: нет |
Программа работает с несколькими динамическиподгружаемыми dll-ми. В каждой dll работает своя нить. Каждая dll использует MSXML для сохранения параметров.
Работают они примерно так: CComPtr<IXMLDOMDocument> m_spXMLDOM; HRESULT hr = m_spXMLDOM.CoCreateInstance(__uuidof(DOMDocument)); hr = m_spXMLDOM->load(CComVariant(m_cFileName.c_str()), &bSuccess); CComPtr<IXMLDOMNode> spXMLNodeMainRoot; hr = m_spXMLDOM->selectSingleNode(CComBSTR(m_cRootName.c_str()), &spXMLNodeMainRoot); CComQIPtr<IXMLDOMElement> spXMLChildElement; hr = m_spXMLNodeMainRoot->selectSingleNode(CComBSTR(element.c_str()), &spXMLNode); hr = spXMLChildElement->setAttribute(CComBSTR(attribute.c_str()),CComVariant(value.c_str())); CComVariant variant(_T(m_cFileName.c_str())); m_cFileName.c_str(), m_cModuleName.c_str()); hr = m_spXMLDOM->save(variant); m_spXMLNodeMainRoot.Release(); m_spXMLDOM.Release(); (Естественно, всё это оформленно в виде класса). Проблема в том, что при закрытии, программа виснет при записи параметоров в dll по этой схеме. Виснет при вызове m_spXMLDOM->save(variant). Такое ощущение, что COM-библиотека, предоставляющая реализацию интерфейсов MSXML выгружается до того, как последняя dll запишет свои параметры. Вопрос в том, когда по идее должны выгружаться COM-библиотеки. Функцию ::CoUninitialize(); вообще не использую. |
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: нет Всего: 44 |
обычно объект ком-сервера выгружается как только счетчик ссылок становится равным 0
в любой книге по ком можно найти что-то типо
Это сообщение отредактировал(а) chaos - 11.10.2006, 12:45 |
|||
|
||||
| lemax |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 14.10.2007 Репутация: нет Всего: 1 |
Попробуй найти лишний вызов CoUninitialize()
Поставь бреак поинтер на все CoInitialize CoUninitialize и поиграйся |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |