【问题标题】:What causes "Method ~ of object ~ failed" in a VB6 application?是什么导致VB6应用程序中的“方法〜对象〜失败”?
【发布时间】:2012-01-11 07:30:44
【问题描述】:

我正在开发一个旧的 VB6 应用程序,最近添加了 Siemens OPC 组件。在 VB6 调试器中运行时我没有问题。

然后,我创建了一个部署包(该包中包含 Siemens OPC dll),并将该应用程序部署在同一台 PC 上。然后我在访问 OPC 对象时收到以下错误消息:

'方法~对象~失败'

谁能建议可能导致此问题的原因或我可以做些什么来获取更多信息?

更新 我知道有关此错误消息的其他问题。这里让我不解的是,使用VB调试器时没有问题。部署后会出现问题 - 即使在同一台机器上。我原以为所有组件都已注册并可用。

代码

Public Sub InitialiseOPC(ServerIP As String, OpcServerName As String, BaseAddress As String)
    On Error GoTo ProcError
    IsInitialised = False

    Set MyOpcServer = New OPCServer
    Dim LocalServers

    LocalServers = MyOpcServer.GetOPCServers(ServerIP)
    ....

调用 GetOPCServers 时发生错误。这是第一次访问 OPC 组件。

有什么方法可以追踪 VB 在这个时候正在做什么(例如 dll 加载)?

更新

我尝试将 Siemens dll 部署到应用程序文件夹而不是默认位置,并且此错误消息不再出现。

【问题讨论】:

  • @Cody Gray - 查看我的更新以了解为什么“dups”无法帮助我
  • 如果您部署到没有 dll 的“新”机器上,您会得到相同的结果吗?
  • 你能发布一些代码来显示引发错误的行吗?
  • @Jontatas - 我手边没有“新”机器,但如果没有其他解决方案,我可以尝试一下

标签: vb6 opc


【解决方案1】:

Method ~ of object ~ failed 在后期绑定调用期间引发异常 (SEH) 时生成。 VB6 努力“包装”每个后期绑定调用以捕获此类意外行为。

在您的情况下,很可能一个 VC 组件正在尝试加载依赖的 DLL 或 COM 对象并失败,但没有优雅地处理失败。相反,它会尝试在空引用上调用方法,并使用访问冲突或类似异常进行轰炸。

【讨论】:

  • +1 谢谢。知道为什么在 EXE 中运行而不是在调试时加载可能会失败吗?我可以获得更多跟踪信息吗?
  • 尝试定位无法了解发生了什么的方法调用。如果在当前文件夹或全局路径变量中找不到文件,则加载 DLL 可能会失败。
  • 我刚刚添加了一个带有代码的更新。 dll 安装到默认位置 - c:\windows 和 c:\program files\common files\siemens\opc。项目使用的所有 dll 都安装到默认位置。您是否建议将所有内容都安装到本地文件夹?
  • 我尝试将 Siemens dll 部署到应用程序文件夹并且 那个 问题已经消失 - 现在转到下一个 :-(
  • 我不确定这是一个有效的修复程序,但如果删除此应用程序,可能会破坏使用这些 DLL 的任何其他应用程序的问题。假设这些是 COM DLL,您的 VB6 程序可能会劫持组件注册以指向您的 DLL 的“私有”副本。这会对 UAC 系统产生额外的混乱后果。这些 DLL 是否曾在其原始位置正确注册?
猜你喜欢
  • 1970-01-01
  • 2012-04-20
  • 2022-01-05
  • 2018-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
相关资源
最近更新 更多