Re[2]: Работа с ревизиями Word из С++
От: paharelau  
Дата: 13.01.03 15:28
Оценка:
Здравствуйте, Tom, Вы писали:

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


P>>Привет всем!


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

P>>Вариант 1:

P>>

P>>
P>>...

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

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

P>>...
P>>


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


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

P>>При попытке взять ревизию может просто крахнуться.

P>>Вариант 2:


P>>

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

P>>        ...
P>>    }
P>>


P>>

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

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


P>>


Tom>А почему бы тебе в методе Next получать не по одному елементу, а целый массив ? И проверять надо на S_FALSE.



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