2012-08-06 61 views
0

我有一個vb6程序需要使用MSOLAP80.dll來正確顯示其數據透視表。但是,因爲MSOLAP90.dll有一些兼容性問題,所以無法使用MSOLAP90.dll,並且仍然顯示數據透視表。將有兩個不同版本的DLL導致問題?

我已註冊MSOLAP90.dll,然後再次註冊MSOLAP80.dll,一切似乎都很好。然而,我不知道這兩者是否實際註冊,或者MSOLAP80.dll是唯一註冊的,因爲我沒有參考MSOLAP90.dll中的新增功能。有可能兩者都是註冊的,並且程序只是使用MSOLAP80.dll,如果有程序需要MSOLAP90.dll,那麼它會知道使用那個?

我想我只是混淆瞭如何註冊DLL的工作,如果有可能有兩個這些註冊在同一時間。有人可以幫忙解釋嗎?

+0

這取決於DLL和他們實現的內容。實質上,對象將使用註冊的最後一個創建。如果您只使用8.0版本的對象,那麼它們只會來自DLL的第8版。如果使用的是9.0版本的對象,它可能會嘗試從90 DLL加載它,或只是徹底失敗。 – Deanna 2012-08-06 14:56:21

+0

我的程序只使用了8點版本的對象,但我如果有兩個會影響其他程序以及好奇? – Sam 2012-08-06 14:59:15

+0

註冊DLL而不同時重新編譯程序表明,這些DLL使用相同的GUID。這是一個問題,你很可能會破壞任何需要msolap90.dll正常工作的程序。這種古代代碼最好在虛擬機上運行。 – 2012-08-06 15:45:47

回答

0

如果你想知道肯定哪一個是註冊,您可以:

  • 看看在符合你的DLL路徑的類型庫引用的對話。
  • 打開RegEdit,然後搜索MSOLAP80.DLL或MSOLAP90.DLL(取消選中「僅匹配整個字符串」)。

如果你找到了兩個DLL的引用,那麼你是安全的,因爲你可以綁定到一個特定的版本。如果您發現對錯誤DLL的引用,則取消註冊錯誤的DLL,並註冊正確的DLL。

COM記事的原始只允許一組的CLSID(其唯一地標識類)的一個版本中,的IID在任一個時刻(它唯一地標識類接口)。可以有多個對LIBID的引用(它標識一個類型庫 - 嵌入在DLLL中的資源),但它們必須有不同的版本。

從Windows XP開始,可以執行並行DLL訪問,其中可執行文件可以訪問特定版本的DLL,覆蓋註冊表中的值。您需要在EXE文件的相同文件夾中嵌入或包含.manifest文件。

不幸的是,這個文件似乎已經從MSDN消失了,僅由一對夫婦的知識庫文章稱: