Сообщений 0    Оценка 0        Оценить  
Система Orphus

QnA: Add-in для Word работает в Word 2000 и выше, а в Word 97 не хочет

Автор: Dmitriy Yakovlev
Источник: RSDN Magazine #4-2004
Опубликовано: 13.11.2004
Исправлено: 10.12.2016
Версия текста: 1.0

Q. Вот я написал Add-in и он работает в Word 2000 и выше, а вот в Word 97 не хочет работать. Поддерживает ли Word 97 Add-ins? Если да то какая разница в реализации для Word 2000?

A. Дело в том, что Office97 вообще не поддерживает COM Add-Ins, в частности, в нем не реализован интерфейс IDTExtensibility2, который позволяет внешним программам встраиваться в приложения Office.

Ну не то, чтобы совсем не позволяет, просто COM Add-Ins не грузятся автоматически при запуске, то есть мы не можем использовать COM расширения напрямую. Но нам никто не мешает загрузить его вручную и передать ему объект Application! Некоторые офисные приложения поддерживают глобальные макросы AutoXXX, конкретно для Ворда - это AutoExec(), AutoNew(), AutoOpen(), AutoClose() и AutoExit(), которые вызываются автоматически. Если тебя интересует только Word, то объясняю что нужно делать:

1. Создай шаблон (*.dot)

2. Открой редактор VBA и создай следующие макросы

      Dim o As Application
Dim obj AsObjectSub AutoExec()
    Set obj = CreateObject("_ИМЯ_ТВОЕГО_ОБЪЕКТА_")
    Set o = ThisDocument.Application
    obj.Initialize o
EndSubSub AutoExit()
    IfNot obj IsNothingThen
        obj.UnInitialize
    EndIfSet obj = NothingSet o = NothingEndSub

3. Помести этот шаблон в папку Startup и проверь, чтобы было разрешено выполнение макросов.

4. Создай у себя в коде методы Initialize и UnInitialize, в который выполни необходимые действия. Например так:

STDMETHODIMP CWTWordAddin::Initialize(IDispatch *Application)
{
    CComQIPtr<_Application> pApp(Application);
    ATLASSERT(pApp);
    if( pApp == NULL )
    return S_FALSE;

    // далее делай все как обычно
    .....
}

P.S. В Office97 ты не сможешь поймать события от кнопок меню и тулбаров. Поэтому тебе придется организовавать обработку команд через макросы, но это уже тема отдельного вопроса. В общем при помощи вышеописанных действий (с отличиями в использовании автомакросов) мне удалось заставить заработать Add-in в Word97, Excel97, PowerPoint97. В Outlook97 и Access97 пока не получилось.


Эта статья опубликована в журнале RSDN Magazine #4-2004. Информацию о журнале можно найти здесь
    Сообщений 0    Оценка 0        Оценить