【问题标题】:Visio Add-in Experts for Visual Studio适用于 Visual Studio 的 Visio 加载项专家
【发布时间】:2015-04-07 08:32:39
【问题描述】:

我想知道是否有人在 .NET 项目中专门为 Visio 处理托管代码加载项。我正在搞乱一个,并试图从 Shape 对象中删除超链接。删除它们工作正常,如果用户保存,那么一切正常。当用户不保存并且在关闭之前由 Visio 提示存在未保存的更改并想知道用户想要做什么时,就会出现问题。如果用户选择“不保存”并尝试退出,则 Visio 应用程序会因未处理的 Win32 异常而崩溃,我已在 Windows 事件查看器中追溯到异常代码:0xc0000005。事实证明这是一个“访问冲突错误”。我发现问题是一行代码调用形状的超链接集合上的 Delete 方法(下面的示例)。有人知道这里发生了什么吗?这是我在 Google 上找不到的 MS 错误吗?希望我在这里为你们提供足够的信息。没想到我需要发布一堆代码,因为我发现只有这行代码在 Visio 尝试在不保存后退出时产生异常。我发现这会产生与 Microsoft.Office.Interop.Visio.dll 版本 12 和 14 完全相同的错误。

internal static Nullable<Boolean> DeleteFirstHyperlink(Shape shape) {
    if(true){ //a condition to pass
        shape.Hyperlinks.get_ItemU(0).Delete();
        return true;
    }
    else{
        return false;
    }
}

【问题讨论】:

    标签: c# .net com visio


    【解决方案1】:

    我认为您可能正在从“删除形状之前”事件处理程序中删除超链接?在这种情况下,你不应该那样做。相反,您可以记住要删除的内容,然后在“没有未决事件”/“已删除形状”事件处理程序中删除它。或者它可能是一些类似的情况。

    在这里查看:https://msdn.microsoft.com/en-us/library/office/ff767512.aspx

    在 Visio 触发 MustFlushScopeBeginning 事件后,客户端程序不应调用具有副作用的 Visio 方法,直到收到 MustFlushScopeEnded 事件。当 Visio 处于 MustFlushScopeBeginning 事件和 MustFlushScopeEnded 事件之间时,客户端可以对 Visio 对象执行任意查询,但导致副作用的操作可能会失败。

    如果不是这种情况,那么可能需要一个完整的示例来说明问题(说明问题的完整源代码)来弄清楚发生了什么。

    我的意思是,通常您可以毫无问题地删除超链接。

    【讨论】:

    • 非常感谢您的回复。这是我还没有遇到过的事情。让我按照您的建议将一些测试代码放在一起,看看我是否可以让它工作。否则将发布代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多