是什么原因引起的;对象的方法失败“;在VB6应用程序中?

是什么原因引起的;对象的方法失败“;在VB6应用程序中?,vb6,opc,Vb6,Opc,我正在开发一个旧的VB6应用程序,最近添加了西门子OPC组件。在VB6调试器中运行时,我没有问题 然后,我创建了一个部署包(包中包含西门子OPC DLL),并在同一台PC上部署了该应用程序。访问OPC对象时,我收到以下错误消息: “对象的方法~失败” 有人能建议是什么导致了这一点,或者我能做些什么来获得更多的信息吗 更新 我知道有关此错误消息的其他问题。让我困惑的是,使用VB调试器时没有问题。问题发生在部署之后-即使在同一台机器上。我原以为所有组件都已注册并可用 代码 Public Sub In

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

然后,我创建了一个部署包(包中包含西门子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)
    ....
调用GetOpcServer时发生错误。这是第一次访问OPC组件

是否有任何方法可以跟踪VB此时正在执行的操作(例如dll加载)

更新

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)
    ....

我尝试将Siemens DLL部署到应用程序文件夹而不是默认位置,但此错误消息不再显示

当在后期绑定调用期间引发异常(SEH)时,将生成对象失败的方法。VB6努力“包装”每个延迟绑定调用,以捕获此类意外行为


在您的情况下,很可能是VC组件试图加载依赖的DLL或COM对象,但失败了,但无法正常处理失败。相反,它尝试调用空引用上的方法,并引发访问冲突或类似异常。

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



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

可能重复@Cody Gray-请参阅我的更新以了解为什么“DUP”无法帮助我。如果部署到“fresh”中,您会得到相同的结果吗没有DLL的机器?你能发布一些代码来显示抛出错误的行吗?@Jontatas-我手头没有“新鲜”的机器,但如果没有其他解决方案,我可以尝试一下它。@Cody Gray的可能副本-请参阅我的更新以了解为什么“dups”不能帮助我,如果您部署到一台尚未安装DLL的“新”计算机上?您能发布一些代码来显示抛出错误的行吗?@jontas-我手头没有“新”计算机,但如果没有其他解决方案,我可以尝试一下它+1谢谢。知道为什么在EXE中运行而不是在debug中运行时加载可能失败吗?我可以获取更多跟踪信息吗?尝试查找无法了解发生了什么的方法调用。如果在当前文件夹或全局路径变量中找不到文件,加载DLL可能会失败。我刚刚添加了一个更新代码。DLL安装在默认位置-c:\windows和c:\program files\common files\siemens\opc。项目使用的所有DLL都安装到默认位置。您是否建议将所有内容安装到本地文件夹?我尝试将西门子DLL部署到应用程序文件夹,但问题已消失-现在转到下一个:-(我不确定这是否是一个有效的修复程序,但如果删除此应用程序,可能会中断使用这些DLL的任何其他应用程序。假设这些是COM DLL,您的VB6程序可能正在劫持组件注册以指向您的“专用”DLL的副本。这可能会对UAC系统造成额外的混乱后果。这些DLL是否在其原始位置正确注册过?+1谢谢。知道为什么在EXE中运行而不是在调试中加载时可能失败吗?我可以获得更多跟踪信息吗?尝试查找无法了解发生了什么情况的方法调用。L如果在当前文件夹或全局路径变量中找不到文件,加载DLL可能会失败。我刚刚添加了一个带有代码的更新。DLL安装到默认位置-c:\windows和c:\program files\common files\siemens\opc。项目使用的所有DLL都安装到默认位置。您建议将所有内容安装到本地文件夹吗文件夹?我尝试将西门子DLL部署到应用程序文件夹,但该问题已消失-现在转到下一个文件夹:-(我不确定这是否是一个有效的修复程序,但如果删除此应用程序,可能会中断使用这些DLL的任何其他应用程序。假设这些是COM DLL,您的VB6程序可能正在劫持组件注册以指向您的“专用”DLL的副本。这可能会对UAC系统造成额外的混乱后果。这些DLL是否在其原始位置正确注册过?