2012-01-11 181 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

相關問題