Здравствуйте, Dmitriy Yakovlev, по ходу приспосабливания своего аддина под Ворд появились новые к Вам вопросы.

В своем проекте подключаю с помощью директивы #import нужную вордовскую тайп либу (MSWORD.OLB). Ну и работаю через смарт-поинтеры. Так мне проще

Возникла одна ситуация, ниже кусок кода:
MSWORD::_ApplicationPtr spApp = m_spApp;
MSWORD::_DocumentPtr spDoc = spApp->GetActiveDocument();
_variant_t vt(1);
int cnt = spDoc->GetHyperlinks()->GetCount();
MSWORD::HyperlinkPtr spLink = spDoc->GetHyperlinks()->Item(&vt);
// сначада использовал
// bstr_t bstrAddress = GetAddress();
BSTR bstr = NULL;
HRESULT hr = spLink->get_Address(&bstr);
В ХР офисе на этом месте все нормально, в 97 spLink не NULL (смотрю через Watch m_pInterface = 0x02e5973c и все вроде на месте). cnt = 17 (17 гиперлиннок в документе).
И в ДебагВью вижу:
First-chance exception at 0x00000000 in WINWORD.EXE: 0xC0000005: Access violation reading location 0x00000000.
First-chance exception at 0x7c81eb33 in WINWORD.EXE: 0x80010105: The server threw an exception.
Это hr в Watch-е
hr 0x80010105 The server threw an exception. HRESULT
Тут я подумал, что нельза наверное подключать ТайпЛибы от 2000 офиса 97 офису. Если так, то к Вам вопрос — ка тогда быть, делать ли отдельно для 97 офиса все? я видел в Ваших предыдущих постах код:
#ifdef __OFFICE_97
DY> pCBButton->OnAction = _bstr_t(_T("OnCmd"));
DY>#endif // __OFFICE_97
значит у Вас отдельный билд для 97 офиса.
И Вы так же само подключаете ТайпЛибы (через #define __OFFICE_97) ?
Я думаю Вы поняли мою проблему, в двох словах — Как надо сделать чтобы работало и в 2000 и в 97 офисе. Но если другие тайплибы, то ведь код совсем другой получется — это ж надо будет с другого неймспейса выбирать интерфейсы. Или возможно, Вы сразу ОЛБ 8 версии подключали и таким образом у Вас работает аддин везде. Да если это так, прийдется переписывать

ух-как не хочется то

Уже уверен на 90% что Вы наверное подключали msword8.olb

И зачем я 2000 то подключал ....
Заранее Вам благодарен!!!