Ведение журнала ошибок Microsoft Visio OLE Automation

Я работаю с API-интерфейсами OleAutomation Java, предоставляемыми SWT(Standard Widget Toolkit), для управления документами Visio. Мы создали оболочки Java для API автоматизации с помощью вызовов OleAutomation. например:(удалить форму)

/**
 * COM Id: 11
 */

public void Delete() {
    //Invoke
    Variant varInputArray[] = new Variant[0];
    Variant varResult = oleAutomation.invoke(11, varInputArray);
    for (Variant _varItr : varInputArray) {
        _varItr.dispose();
    }
    if(varResult !=null)
    {
        varResult.dispose();
    }
}

Я сталкиваюсь со специфической проблемой при вызове этого удаления из определенного места в логике приложения. На странице я размещаю фигуру и призываю удалить. Для вызовов с нечетными номерами удаление успешно, и varResult возвращает VT_EMPTY(1-й,3-й,5-й.... время вызова). Для вызовов с четными номерами (я снова помещаю фигуру на страницу и вызываю -2-й,4-й, 6-й и т. Д.) VarResult возвращает значение "ноль", что указывает на ошибку. Теперь мне нужно понять, что не так с четным звонком. Есть ли какая-либо возможность ведения журнала в среде Visio Automation, которая может регистрировать причину сбоя?

1 ответ

Попробуйте удалить фигуры в обратном направлении. Т.е. повторять коллекцию в обратном порядке при удалении фигур. Это означает, что вместо:

shapes = Page.Shapes;
foreach (shape : shapes)
{
    if (xxx)
        shape.Delete()
}

Попробуй это

shapes = Page.Shapes;
for (int i = shapes.Count; i > 0; --i)
{
    if (xxx)
        shapes[i].Delete()
}

Значит, Visio имеет немного "наивное" управление коллекциями, поэтому удаление элементов из коллекции во время итерации может привести к проблемам, и это следует делать осторожно, как это делается для массива.

Кроме того, вы можете сначала выбрать все фигуры для удаления, а затем удалить их за один снимок:

shapes = Page.shapes;
sel = Page.CreateSelection(visSelTypeEmpty);

foreach (shape : shapes)
{
    if (xxx)
        sel.Select(shape, visSelect);
}

sel.Delete();
Другие вопросы по тегам