Привет всем!
Вопрос может не совсем в тему, но я не знаю куда обратиться. Дело в следующем. Пытаюсь из 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 входит в бесконечный цикл.
Вопрос, может кто сталкивался с работой с ревизиями. Буду благодарен любым идеям и предложениям.