2012-01-11 151 views
1

我正在使用旧的VB6应用程序,并且最近添加了西门子OPC组件。在VB6调试器中运行时,我没有问题。在VB6应用程序中导致“Method〜of object〜failed”的原因是什么?

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

“Method对象的~~失败”

任何人都可以提出什么可能导致这或我能做些什么,以获得更多的信息?

UPDATE 我意识到有关此错误消息的其他问题。令我困惑的是,使用VB调试器时没有问题。部署后会发生问题 - 即使是在同一台机器上。我会认为所有组件都保持注册并可用。

CODE

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加载)?

UPDATE

我试图部署西门子的dll到应用程序文件夹,而不是默认位置,但此错误信息不再出现。

+0

对象'〜'失败“的”方法'〜'是什么意思?]的可能重复(http://stackoverflow.com/questions/1302026/what-does-method-of-object-failed-mean ) – 2012-01-11 07:33:04

+0

@Cody Grey - 请参阅我的更新,了解“dups”无法帮助我的解释 – paul 2012-01-11 07:45:37

+0

如果您部署到没有dll的“新鲜”机器,您会得到相同的结果吗? – Jontatas 2012-01-11 07:53:07

回答

4

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

在你的情况大多数情况下,VC组件试图加载依赖的DLL或COM对象并失败,但不能正常处理失败。相反,它会尝试使用访问冲突或类似异常来调用空引用和炸弹的方法。

+0

+1谢谢。任何想法为什么加载可能会失败在EXE中运行,但不是在调试?我能获得更多跟踪信息吗? – paul 2012-01-11 10:42:44

+2

尝试查找方法调用,但无法获知所发生的情况。如果在当前文件夹或全局路径变量中找不到文件,则加载DLL可能会失败。 – wqw 2012-01-11 11:11:02

+0

我刚刚添加了代码更新。 dll安装到默认位置 - c:\ windows和c:\ program files \ common files \ siemens \ opc。项目使用的所有dll都安装到默认位置。你会建议安装一切到本地文件夹? – paul 2012-01-11 13:35:04

相关问题