我越來越混亂,看似不一致的結果有一個的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++中都會破壞代碼。
您是否刪除了舊的DLL?如果刪除了這些DLL,然後編譯它構成一個新的GUID。如果該DLL已存在,則從現有文件讀取guid。您提供的最後一個示例在註冊表中查找GUID,因此可以工作 – Rob
我們使用二進制兼容性來維護ID。我們已經找到了這個問題。我會添加更多細節。 –