【问题标题】:What causes VB6 "Run-Time Error '5': Invalid Procedure Call or Argument"是什么导致 VB6“运行时错误'5':无效的过程调用或参数”
【发布时间】:2010-03-16 13:32:02
【问题描述】:

在 VB6 中,用户偶尔会收到此错误,我无法重现。

运行时错误“5”:无效的过程调用或参数

我引用的是“MSWord 10 对象库”,有时在应用程序打开 MSWord 2002 后的某个时间点会发生此错误。但是,此应用程序多年来一直引用 MSWord 10 对象库,并且此错误刚刚开始发生在最近几个月。

代码使用以下内容对应用程序进行炮击:

Dim app As Word.Application = GetObject("", "Word.Application")

我假设我在某处引入了一个错误,但不知道是什么原因造成的。该错误不会经常发生,并且当我站在那里时,用户无法重现该错误。该错误会强制应用完全关闭。

用户正在运行 Windows XP。报告问题最多的用户是通过 Citrix 运行应用程序。共有 350 名用户,其中大约 100 人通过 Citrix 使用该应用程序。

关于如何修复错误的任何想法?

【问题讨论】:

    标签: error-handling vb6 runtime-error citrix


    【解决方案1】:

    从内存中使用 VB6(现在使用 .net),这可能表明用户机器内存不足,或者您的代码无法获取单词 app 的句柄。

    如果您无法在 Visual Studio 中产生问题并且不确定代码中的哪一行导致了问题,您最好在导致问题的代码周围添加错误处理程序。

    放在有问题的子的顶部

       On Error GoTo MyErrorHandler
    

    然后放在底部

       On Error Goto 0
       Exit Sub
    MyErrorHandler:
       MsgBox "Error " & Err.Number & " (" & Err.Description & ") at line " & Erl
    

    而不是像我在这里使用的 MsgBox,而是考虑写到一个文件中。考虑到对每一行进行编号,也可以让 Erl 正常工作。

    对于 VB6,一个很棒的插件是 MZ 工具 link,它将帮助您非常轻松地添加错误处理和行号

    【讨论】:

    • +1 放入错误处理程序并放入行号,找出是哪一行引发了错误,然后您就可以更好地找出发生错误的原因。跨度>
    • 一个例子是让焦点到一个隐藏的控件。
    【解决方案2】:

    这可能是一个“速度”问题,其中用户多次启动 Word/您的表单并触发模式显示错误 (http://support.microsoft.com/kb/242347)。例如您是对应用程序进行炮击还是在容器窗口中显示它?他们是否可能变得不耐烦并多次点击按钮?尝试多次快速单击按钮或设置焦点,反复按 Enter。

    如果是这种情况,您将需要处理/阻止多次点击(更容易)或以某种方式预加载 Office,以最大限度地减少应用初始化时的延迟。

    【讨论】:

    • 代码使用以下命令对应用程序进行炮击: Dim app As Word.Application = GetObject("", "Word.Application") 实际上,报告问题最多的用户是通过 Citrix 运行应用程序.共有 350 名用户,大约 100 人通过 Citrix 使用该应用
    猜你喜欢
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多