Работа с ревизиями Word из С++
От: paharelau  
Дата: 13.01.03 14:46
Оценка:
Привет всем!

Вопрос может не совсем в тему, но я не знаю куда обратиться. Дело в следующем. Пытаюсь из Visual C++ сравнивать Word документы. В принципе, все нормальнло, до тех пор пока не надо работать с коллекциями ревизий (Word::RevisionsPtr). А тут-то и наступает темная ночь. Как нормально пройтись по этой коллекии.
Вариант 1:


...

Word::RevisionPtr spRevisions =...;
long lCount = spRevision->GetCount();

for(long it = 1L; it<=lCount; it++)
{
   Word::RevisionPtr = spRevisions->Item(it)
   ...
}

...


Полная задница!!!

Во-первых, если ревизий много — работает очень медленно!!!(Очень!!!). Во-вторых, на Word 2000 количество может быть, к примеру, 10, а реально в коллекции 4-5 ревизий, причем с абсолютно рандомными индексами!
При попытке взять ревизию может просто крахнуться.

Вариант 2:


 Word::_DocumentPtr doc = ...;
    IUnknownPtr spUnk = doc->Revisions->Get_NewEnum();
    CComQIPtr<IEnumVARIANT, &IID_IEnumVARIANT> pNewEnum = spUnk;
    Word::RevisionPtr spRevision;
    VARIANT varRev;
    ::VariantInit(&varRev);
    while (pNewEnum->Next(1, &varRev, NULL) == S_OK) 
    {
        ASSERT (varRev.vt == VT_DISPATCH);
        spRevision = varRev.pdispVal; 
        ::VariantClear(&varRev); 

        ...
    }



В принципе это работает, пока не сравниваются 2 абсолютно разных документа. Иначе на Word XP входит в бесконечный цикл.

Вопрос, может кто сталкивался с работой с ревизиями. Буду благодарен любым идеям и предложениям.

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.