文章編號: 313984 - 上次校閱: 2005年5月19日 - 版次: 3.0

Visual Basic Winsock 控制項執行階段錯誤 429 和延展性

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。

在此頁中

全部展開 | 全部摺疊

結論

Microsoft Winsock 控制項 (Mswinsck.ocx) 不是設計用來在執行階段以動態方式建立。 若要將此控制項請在設計階段將它放在表單上。否則,可能會得到執行階段錯誤 429,ActiveX 元件無法建立物件。

而且,不要使用 Winsock 控制項在伺服器環境中的如 Microsoft 網際網路資訊伺服器 (IIS) 和 Microsoft COM +,可能需要擴充性。

其他相關資訊

執行階段錯誤 429

如果 nondevelopment 電腦 (沒有安裝的 Visual Basic 的電腦) 上執行應用程式,可能會在執行階段錯誤 429 失敗的應用程式,在執行階段透過早期繫結回合的使用,在設計階段以動態方式建立 Winsock 控制項:
執行階段錯誤 429':
ActiveX 元件無法建立物件
因為目標電腦遺失授權資訊對於應用程式中使用的控制項物件,就會發生這個錯誤。您可能會嘗試設定專案參考指向 MSWINSCK.ocx,然後產生部署封裝,透過 「 封裝暨部署精靈 」 的使用。這會產生包含 Winsock 控制項的正確版本的安裝套件。不過,控制項的授權識別碼將不會編譯到應用程式除非控制項的執行個體放在表單上。當想具現化物件在執行階段應用程式有沒有方法可以提供授權] 機碼並程式碼將會失敗。下列程式碼,例如會在設計階段正確執行,但並沒有安裝的 Visual Basic 的電腦上的執行階段將會失敗:
Dim myWinSock As MSWinsockLib.Winsock

Sub Main()
    ' Early binding does not work
    Set myWinSock = New MSWinsockLib.Winsock

    myWinSock.LocalPort = 5432
    
    myWinSock.Listen
    
    MsgBox ("Listening!")
    
    myWinSock.Close
End Sub
因此,您必須提供 Winsock 控制項在表單上的執行個體因此該 Visual Basic 可以編譯入應用程式授權資訊。您可以使隱藏起來,若有必要的表單。若要如此做,設定表單的 [看得見] 屬性為 [False]。您可以再準備進行部署。下列程式碼片段會示範此方法:
Dim myWinsock As MSWinsockLib.Winsock

Sub Main()
    ' Form1 is hidden
    Set myWinsock = Form1.myWinsock

    myWinsock.LocalPort = 5432
    
    myWinsock.Listen
    
    MsgBox ("Listening!")
    
    myWinsock.Close
End Sub
				
為另一個方法您可以放置 Winsock 控制項物件在使用者控制項物件的視覺化設計工具上做通常為了擴充功能的 Winsock 控制項,或子類別為組成控制項。不過,這種方法不能解決授權需求。一個應用程式在執行階段順利執行使用包裝函式物件包裝函式物件必須最後是在表單上。

延展性

Winsock 控制項被為了在用戶端或光線負載的伺服器應用程式中使用而設計的。在多執行緒的伺服器環境中,尤其是在 IIS 和 COM +,可能重要的延展性,Microsoft 並不支援控制項的使用。在這樣的環境中使用此控制項可能會造成 unpredicatible 問題,包括鎖死。Microsoft 建議您考慮使用 Winsock API 和在這些情況下 [IO 完成連接埠 (IOCP) 等替代技術。

?考

如需詳細資訊按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中 「 文件:
274754? (http://support.microsoft.com/kb/274754/EN-US/ ) 資訊: 授權與 Visual Basic 所建立的使用者控制項的相關問題
241126? (http://support.microsoft.com/kb/241126/EN-US/ ) 資訊: 動態新增 UserControls 需要執行階段授權
192800? (http://support.microsoft.com/kb/192800/EN-US/ ) 資訊: 使用 IOCP Winsock 伺服器中時,設計問題

這篇文章中的資訊適用於:
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 3
  • Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 4
  • Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 5
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
關鍵字:?
kbmt kbdswnet2003swept kbapi kbctrl kbinfo kbnetwork kbwinsock KB313984 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:313984? (http://support.microsoft.com/kb/313984/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。