Word COM AddIn
От: Kovu  
Дата: 14.07.04 12:27
Оценка:
Подскажите если кто знает.

Есть у меня Word COM AddIn добавляющий свой тулбар.

Word при закрытии стал сохрянять normal.dot и это происходит очень долго.
Если плагин отключаю — то закрывается мгновенно. С чужими плагинами (исходников нету) такого не наблюдал.

У меня реализован по большому счету только метод OnConnection.

Из чего может так все тормозить? Можно ли это исправить?

И еще вопрос. Можно ли какнибудь выяснить что меня вызывли именно из ворда/экселя/...
кроме как использование конструкции:
STDMETHODIMP CConnect::OnConnection (IDispatch * Application
{
CComQIPtr <PowerPoint::_Application> spAppTest1(Application);
CComQIPtr <Word::_Application> spAppTest2(Application);
CComQIPtr <Excel::_Application> spAppTest3(Application);

if (spAppTest1 != NULL)
if (spAppTest2 != NULL)
if (spAppTest3 != NULL)

?

Заранее спасибо.
Re: Word COM AddIn
От: Bob Kotl Россия  
Дата: 14.07.04 16:34
Оценка: 2 (1)
Здравствуйте, Kovu, Вы писали:

K>И еще вопрос. Можно ли какнибудь выяснить что меня вызывли именно из ворда/экселя/...

K>кроме как использование конструкции:
попробуй опроси свойство Application.Name
Re[2]: Word COM AddIn
От: Kovu  
Дата: 15.07.04 06:15
Оценка:
Здравствуйте, Bob Kotl, Вы писали:

BK>Здравствуйте, Kovu, Вы писали:


K>>И еще вопрос. Можно ли какнибудь выяснить что меня вызывли именно из ворда/экселя/...

K>>кроме как использование конструкции:
BK>попробуй опроси свойство Application.Name

Т.е предлагается по имени выбрать свойство (поскольку в IDispatch свойства Name нету естественно...) и если такое есть прочитать его содержимое.

Да, я об этом тоже думал. Если ничего другого не найдется придется наверное так.
Re[3]: Word COM AddIn
От: globus  
Дата: 25.11.04 11:12
Оценка:
Hi All,

Нашел тему и решил свой вопрос задать
Удаляю я в OnDisconnection или в OnBeginShutdown (без разницы — не работает) свое меню из трех пунктов


variant_t vtMenuType(Office::msoControlPopup);
_variant_t vtMenuTemp(VARIANT_TRUE);
_variant_t vtMainTag(PDF_MENU_MAIN_TAG);

__CommandBarsPtr spCmdBars = NULL;
_Get_App(spCmdBars, m_spApp);
Office::CommandBarPtr spCmdBar = spCmdBars->GetActiveMenuBar();

spCmdBar->GetControls()->GetItem(g_Local.LocalizeString(PDF_MENU_NAME))->Delete(vtMenuTemp);
        
CommandMenuItem1Events::DispEventUnadvise((IDispatch*)m_spMenuItem1);
CommandMenuItem2Events::DispEventUnadvise((IDispatch*)m_spMenuItem2);
CommandMenuItem3Events::DispEventUnadvise((IDispatch*)m_spMenuItem3);
        
m_spMenuItem1 = NULL;
m_spMenuItem2 = NULL;
m_spMenuItem3 = NULL;


написал ф-ию которая выводит в оутпут дебагера все пункты меню. Вызываю ее после даного кода (после удаления меню) — не показывает моего меню, количество меню на единицу меньше чем было — все признаки того, что меню нету. Но! если опять загружаю меню, оно есть (это показывает та самая функция распечатки всех пунктов меню и количество элементов меню увеличено на один). Если удалить normal.dot — все в порядке. Если делать, как проситал здесь в форуме


spApp->NormalTemplate->Saved = VARIANT_TRUE

(этот код я вставляю после своего удаления меню перед выходом c OnBeginShutdown или OnDisconnection)

Кто, что посоветует? Заранее благодарен!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.