0x80040112 : 無使用此類別的授權許可
出自VFP Wiki
(→如何解決) |
(→如何解決) |
||
第14行: | 第14行: | ||
====如何解決==== | ====如何解決==== | ||
這是一個VFP6.0的bug,請參閱:http://support.microsoft.com/default.aspx?scid=kb;en-us;192693 | 這是一個VFP6.0的bug,請參閱:http://support.microsoft.com/default.aspx?scid=kb;en-us;192693 | ||
- | |||
參考: http://zzzevazzz.blogchina.com/ | 參考: http://zzzevazzz.blogchina.com/ | ||
當你下載並註冊mswinsck.ocx,然後嘗試那些代碼時,卻會得到一個"類別未授權使用(Class is not licensed for use)"錯誤,錯誤號0x80040112。那些代碼的作者似乎都以為MSWinsock和一般的控件一樣,只要用regsvr32註冊就能正常使用了,沒有實際測試它的可移植性。而轉貼文章的人,更不會關心內容是否可靠,一味地複製粘貼而已。結果,網上所有關於VBS調用MSWinsock的例子都是"空中樓閣",沒有一個跑的起來。國內如此,國外也一樣。所有對該控件無法使用的質疑,都被人以"需要註冊"為理由打發了。當然,也有瞭解"真相"的人,但其給出的解決方案竟然是用VB重新寫個ocx封裝MSWinsock,這實在是@#$%^&!。 | 當你下載並註冊mswinsck.ocx,然後嘗試那些代碼時,卻會得到一個"類別未授權使用(Class is not licensed for use)"錯誤,錯誤號0x80040112。那些代碼的作者似乎都以為MSWinsock和一般的控件一樣,只要用regsvr32註冊就能正常使用了,沒有實際測試它的可移植性。而轉貼文章的人,更不會關心內容是否可靠,一味地複製粘貼而已。結果,網上所有關於VBS調用MSWinsock的例子都是"空中樓閣",沒有一個跑的起來。國內如此,國外也一樣。所有對該控件無法使用的質疑,都被人以"需要註冊"為理由打發了。當然,也有瞭解"真相"的人,但其給出的解決方案竟然是用VB重新寫個ocx封裝MSWinsock,這實在是@#$%^&!。 | ||
- | + | ||
- | + | 那麼,"真相"究竟是什麼?搜索"類別未授權使用"和錯誤號,這是個好主意,但結果不理想。我們需要逆向思考,為什麼原作者不會遇到錯誤。答案是原作者的mswinsck.ocx不是單獨註冊的,而是隨VB一起安裝的。其中的差別在於,後者會安裝VB控件的設計時許可證(design-time license)。ActiveX控件的License有兩種:設計時(design-time)和運行時(run-time)。當編譯調用了某個控件的exe/dll/ocx時,編譯器會自動加入該控件的運行時許可證,所以"重新寫個ocx封裝MSWinsock"這個辦法可行。使用腳本直接調用MSWinsock時沒有運行時許可證,這時腳本宿主會嘗試在註冊表中獲取設計時許可證,單獨註冊的MSWinsock沒有相應的設計時許可證,所以就出錯了。 | |
- | + | ||
+ | 在VS.NET安裝盤裡有VB6控件的授權密鑰(\Extras\VB6 Controls\VB6Controls.reg),導入註冊表後就能正常使用包括MSWinsock在內的VB6控件了。 | ||
+ | |||
另一個解決方法: | 另一個解決方法: | ||
重點在於mswinsck.ocx 這個ActiveX Control 的使用權註冊,這必須要在Windows 的registry | 重點在於mswinsck.ocx 這個ActiveX Control 的使用權註冊,這必須要在Windows 的registry |
在2005年4月20日 (三) 13:13所做的修訂版本
目錄 |
說明
當要使用VFP 提供的 ActiveX 元件時,出現錯誤訊息:
- OLE錯誤程式碼0x80040112:無使用此類別的授權許可
或
- 0x80040112 : Class is not licensed for use
來源
提供者
- roror
如何解決
這是一個VFP6.0的bug,請參閱:http://support.microsoft.com/default.aspx?scid=kb;en-us;192693
參考: http://zzzevazzz.blogchina.com/ 當你下載並註冊mswinsck.ocx,然後嘗試那些代碼時,卻會得到一個"類別未授權使用(Class is not licensed for use)"錯誤,錯誤號0x80040112。那些代碼的作者似乎都以為MSWinsock和一般的控件一樣,只要用regsvr32註冊就能正常使用了,沒有實際測試它的可移植性。而轉貼文章的人,更不會關心內容是否可靠,一味地複製粘貼而已。結果,網上所有關於VBS調用MSWinsock的例子都是"空中樓閣",沒有一個跑的起來。國內如此,國外也一樣。所有對該控件無法使用的質疑,都被人以"需要註冊"為理由打發了。當然,也有瞭解"真相"的人,但其給出的解決方案竟然是用VB重新寫個ocx封裝MSWinsock,這實在是@#$%^&!。
那麼,"真相"究竟是什麼?搜索"類別未授權使用"和錯誤號,這是個好主意,但結果不理想。我們需要逆向思考,為什麼原作者不會遇到錯誤。答案是原作者的mswinsck.ocx不是單獨註冊的,而是隨VB一起安裝的。其中的差別在於,後者會安裝VB控件的設計時許可證(design-time license)。ActiveX控件的License有兩種:設計時(design-time)和運行時(run-time)。當編譯調用了某個控件的exe/dll/ocx時,編譯器會自動加入該控件的運行時許可證,所以"重新寫個ocx封裝MSWinsock"這個辦法可行。使用腳本直接調用MSWinsock時沒有運行時許可證,這時腳本宿主會嘗試在註冊表中獲取設計時許可證,單獨註冊的MSWinsock沒有相應的設計時許可證,所以就出錯了。
在VS.NET安裝盤裡有VB6控件的授權密鑰(\Extras\VB6 Controls\VB6Controls.reg),導入註冊表後就能正常使用包括MSWinsock在內的VB6控件了。
另一個解決方法: 重點在於mswinsck.ocx 這個ActiveX Control 的使用權註冊,這必須要在Windows 的registry 中,有一個license key 才可以,但mswinsck.ocx 的license key 是什麼呢? 微軟網站上,有個公用程式可以下載: http://download.microsoft.com/download/vc60std/sample/1.1/NT45/EN-US/Licreqst.exe 然後就可以看到mswinsck.ocx(其ProgID 是「MSWinsock.Winsock」)的license key 了(應 該說可以看到其它ActiveX Control 的license key),找到後,在registry 的: HKEY_CLASSES_ROOT\Licenses 找到該key、並點選到它,然後匯出登錄檔,把這個登錄檔給user,在他的電腦中用滑鼠 DoubleClick 將其加入登錄中,當然mswinsck.ocx 也需以regsvr32 註冊,這兩個動作完成後, Client 就可以正常執行了。而這兩個動作都可以透過WSH 物件來做,也就是說,你的程式可 以幫user 自動做的意思。 其它ActiveX Control 的license 問題,也都可以比照此法。