雖然我在做VB6開發,但我認爲這是一個更廣泛的問題。我發現有時在VB IDE中會出現一個錯誤:[BadImplementsRefInCompatLib]。使用Matt Curland的「高級Visual Basic 6」附帶的類型庫查看器,它標誌着我的組件中的類型庫有一個它找不到的類型庫的引用,但不是它是什麼。當TLI組件試圖找出在另一個類型庫中定義的接口時,底層的錯誤與TLI組件有關。無效的外部類型庫引用(「錯誤加載DLL」)
我也試過OLE視圖 - 嘗試並反向編譯IDL - 但同樣,它在嘗試獲取外部類型時給出了一條錯誤消息,而沒有標識出錯誤的值。
我將實際錯誤追溯回註冊表中指向組件的類型庫引用,但主要版本不正確。替換主要版本解決了問題。
我使用了二進制編輯器來查看是否可以發現在類型庫中使用了哪些信息。事實上,我找到了它引用的組件的名稱(沒有路徑),但我無法制定出格式。我實際上希望找到一個類型庫GUID和版本號的表。我想我可以編寫代碼來提取這些名稱,並消除「工作」引用,但這有點粗糙。
有誰知道類型庫如何引用外部類型?
類型庫有一個版本號有一個很好的理由。您可以編輯此問題,但在調用已更改的過程時,這隻會在運行時產生無法識別的故障。只有獲得並註冊正確的類型庫纔是解決方案。 –
@HansPassant - 我完全理解版本化類型庫的要點。不幸的是,TLI組件的行爲並不是非常有用 - 它提供了一個錯誤,但沒有提供某種形式的關於* why的信息*它無法解析引用,所以我可以採取適當的措施。此刻,我必須猜測爲什麼它沒有奏效! –