Re: Работа с ревизиями Word из С++
От: Tom Россия http://www.RSDN.ru
Дата: 13.01.03 15:18
Оценка:
Здравствуйте, 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>


А почему бы тебе в методе Next получать не по одному елементу, а целый массив ? И проверять надо на S_FALSE.
Народная мудрось
всем все никому ничего(с).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.