2013-10-03 51 views
0

我越來越混亂,看似不一致的結果有一個的ActiveX DLL試圖創建的另一個實例。48加載DLL,MSADO相關

一切工作,直到我們重建了我們整個代碼庫,這事自上任以來在它前幾年從來沒有做過。我們以前只是根據需要製作了一些作品。

問題是在多個地方出現的,但這裏是一個代表性的例子:

Dim objMid As MiddlePiece.clsMyClass 
Set objMid = CreateObject("MiddlePiece.clsMyClass") 

這被擊中的錯誤:在CreateObject線(48加載DLL錯誤)。我試着改變代碼,並得出以下結果。

Dim objMid As MiddlePiece.clsMyClass 
Set objMid = New MiddlePiece.clsMyClass 

這再次給我錯誤48。

Dim objMid As Object 
Set objMid = New MiddlePiece.clsMyClass 

這也給了錯誤48.

Dim objMid As Object 
Set objMid = CreateObject("MiddlePiece.clsMyClass") 

那一個實際工作。

誰能解釋的真正的區別是它們之間是什麼,以及爲什麼只有最後一部作品了,而至少第一個是之前的工作?

我想我理解早期和晚期綁定的區別,只有最後一個例子是晚期綁定的實例,但我已經檢查並確認在構建PC和測試機器上,註冊表包含MiddlePiece.dll的版本相同,所以我不清楚爲什麼會失敗。

這個問題似乎是一個事實,即MiddlePiece.dll與Microsoft ActiveX數據對象建立幹。自從我們從Windows XP遷移到Windows 7以來,出現了許多與此相關的問題。msado26.tlb庫不再適用於我們,因此我們必須改變對該庫的引用來引用msado60_Backcompat.tlb。這似乎工作了一段時間,但我們已經有兩個不同版本的msado15.dll更麻煩。最新版本在VB6和C++中都會破壞代碼。

+0

您是否刪除了舊的DLL?如果刪除了這些DLL,然後編譯它構成一個新的GUID。如果該DLL已存在,則從現有文件讀取guid。您提供的最後一個示例在註冊表中查找GUID,因此可以工作 – Rob

+0

我們使用二進制兼容性來維護ID。我們已經找到了這個問題。我會添加更多細節。 –

回答

0

我們更換了所有引用參考外國的msado60_backcompat.tlb到msado26.tlb,實質上撤消「修復」我們第一次的時候,我們大約兩年前過渡到Windows 7實現。這基本上都是由於微軟引入的問題。一個研究這個問題的好地方,對於那些關心的人來說是here.這使我們能夠重建Windows 7機器上的所有東西並解決多個問題。