2009-07-13 87 views
4

我一直試圖加載一個OCX文件到我今天大部分時間的VB6項目之一。我已經嘗試在註冊表中檢查COM註冊表中最好的,我知道如何,並試圖在文件上使用REGSVR32多次無濟於事。當我嘗試加載組件(在項目 - >組件中)是'FilePath \ FileName.ocx'無法加載時,我從VB6獲得的所有內容。有沒有其他人看過這個,如果是的話,任何想法如何解決它?VB6錯誤 - 無法加載.ocx文件

回答

2

這可能是一個依賴性問題 - OCX所需的一些其他組件不存在。 Dependency Walker會發現任何靜態依賴關係。

+0

果然,這竟然是一個依賴性問題。我肯定已經有一段時間了,我完全忘記了我曾經問過這個問題。 – 2010-08-20 20:47:22

3

只是一對夫婦的提示,以幫助查出問題....

來看看有OLEVIEW

檢查名稱的控制:如果是保留字,如「菜單」之一, vb6將無法加載它。 (雖然vb6會很樂意讓你創建(並使用)一個壞名字,直到它被保存並重新加載)

檢查接口:它是否描述了功能?您可能有損壞或未經許可的ocx。

嘗試使用ActiveX控件測試容器加載它... 如果可以,問題與VB6而不是ocx。

+0

在OLEVIEW使用文件 - >查看類型庫在OCX,並注意導入庫線。例如importlib(「oleguids3.tlb」);意味着在引用OCX之前需要在開發機器上註冊此tlb。原因是如果一個庫被OCX的[external]接口引用,那麼它應該在開發機器上註冊,或者OCX在IDE中不可用。 – wqw 2009-07-14 11:26:26

0

當你說你已經使用「REGSVR32上的文件無果」你的意思是你得到一個文件名成功的消息,或者是一條錯誤信息?如果註冊文件成功CMB可能是正確的關於ocx未經許可。

0

除了許可外,還有一些vb6的其他旅程點。 尤其是如果OCX是在VB6中開發的。

如果是這樣,'正式'系統註冊版本可能會與您正在使用的特定ocx衝突。換句話說,它們都可能具有相同的專有名稱(或classid),但是您嘗試使用的名稱可能不會實現系統註冊的所有功能(即您的版本較少)。當作者希望保持二進制兼容性,同時增強控件的功能時,就會出現這種情況。只要公共接口保持兼容,vb就不會重新計算classid。

您可以通過強制取消註冊特定控件(實際取消註冊控件的所有實例)來解決此問題。 (regsvr32/u control.ocx)然後重新註冊您打算使用的那個。確保在執行此操作時不存在VB6的運行實例,否則結果可能不起作用。 (請檢查您的任務列表)

希望幫助...

0

的控制可能是在另一個DLL或OCX,可能會丟失或沒有註冊的依賴,這可能表現爲VB報告,該控制你正在嘗試使用缺少。但是,我不確定你將如何識別依賴關係。據我所知,依賴walker識別靜態依賴;我不確定它是否可以識別COM依賴關係。

2

我們最近修正了類似的錯誤。在我們的例子中,錯誤出現在Visual Basic項目(.vbp)文件中。項目文件已在標準化構建機器之外進行編輯,幷包含對OCX組件的引用 - 包括工作站特定路徑&版本的組件。

您可以在文本編輯器中編輯項目文件或從版本控制中獲取工作版本。

0

Un註冊Ocx 重新註冊ocx 然後再次在VB6中加載項目,它爲我工作。

謝謝大家

0

取消註冊和註冊再次爲我工作。
請注意,您需要註冊使用此語法這個組件:

regsvr32 /i:design olch2x8.ocx