在 Windows 2012 上執行一個呼叫VB6 COM元件透過 Microsoft Active Server Pages Object Library,
將資料直接Response到頁面上,居然發生Automation error Library not registered的錯誤!
環境:Windows 2012, VB6 COM, Microsoft Active Server Pages Object Library
最近同事在 Windows 2012 上執行一個呼叫VB6 COM元件透過 Microsoft Active Server Pages Object Library,
將資料直接Response到頁面上,結果居然發生「abcSystem.Runtime.InteropServices.COMException (0x8002801D): Automation error Library not registered」的錯誤,如下,
System.Runtime.InteropServices.COMException (0x8002801D): Automation error Library not registered.
於 Microsoft.VisualBasic.CompilerServices.LateBinding.InternalLateCall(Object o, Type objType, String name, Object[] args, String[] paramnames, Boolean[] CopyBack, Boolean IgnoreReturn)
於 Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateCall(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack, Boolean IgnoreReturn)
於 ASP.aspdll_aspx.__Render__control1(HtmlTextWriter __w, Control parameterContainer)
依之前「asp.net網頁Error in loading DLL錯誤處理!」一篇中檢查,該環境是有安裝ASP的哦!
相同的程式,在Windows 8.1的環境也是可以執行的!
只好在Code中加入MsgBox 訊息,讓它寫到事件顯示器中,
結果發現錯誤是發生在透過 Response 物件 Write 出去時(rsp.Write "test"),發生錯誤的!
冏…..想不出到底是那裡的問題所造成的....
後來想說,將 Dim rsp As Object 改成 Dim rsp As ASPTypeLibrary.Response ,
看看能不能出現更詳細的訊息讓我知道那個物件沒有註冊到,
結果程式居然OK了! 太神奇了~~~ 居然有這種事 .....
所以... 即然加入參考了,就直接用參考的物件型別,而不再宣告成 Object。
Public Sub Test()
Dim objASP As ObjectContext
Set objASP = GetObjectContext
Dim rsp As Object
Set rsp = objASP.Item("Response")
rsp.Write "test"
Set rsp = Nothing
Set objASP = Nothing
End Sub
改成
Public Sub Test()
Dim objASP As ObjectContext
Set objASP = GetObjectContext
Dim rsp As ASPTypeLibrary.Response
Set rsp = objASP.Item("Response")
rsp.Write "test"
Set rsp = Nothing
Set objASP = Nothing
End Sub
參考資訊
asp.net網頁Error in loading DLL錯誤處理!
[ASP]在Windows 2008中,使用ObjectContext.Item("Response")會有424「此處需要物件」錯誤的解決方式
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^