文章編號: 241896 - 上次校閱: 2007年5月18日 - 版次: 5.1 Visual Basic 6.0 ActiveX 元件的執行緒問題
本文曾發行於 CHT241896 在此頁中徵狀 在多執行緒的環境中使用 Visual Basic 6.0 ActiveX 元件時,您應該會察覺到下列潛在的問題: ActiveX DLL 位於多執行緒的用戶端中
注意 在 Visual Studio 6.0 的 Service Pack 3 之前,如果啟用 [保留於記憶體中],在處理序關閉期間有可能會得到 AV。在最新的 Visual Studio 6.0 Service Pack 中已經修正這個問題: http://msdn2.microsoft.com/en-us/vstudio/aa718364.aspx'
(http://msdn2.microsoft.com/en-us/vstudio/aa718364.aspx)
如果 ActiveX DLL 或 UserControl 專案包含 API 宣告,您可能會在處理序/執行緒關閉期間,或物件建立期間遇到鎖死問題,即使在 ActiveX DLL 專案中選取 [自動執行] 核取方塊,情況也是如此。 如果要解決這個問題,您可以在 Visual Basic 中使用「型別程式庫」,不要使用「宣告」。如需有關如何使用「型別程式庫」的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件: 189133?
(http://support.microsoft.com/kb/189133/
)
如何使用型別程式庫讓 C DLL 更輕鬆存取 VB
由多執行緒的用戶端,或數個單一或多執行緒的用戶端存取的 ActiveX EXE Runtime error '7':out of memory and
sometimes followed by a disk operation error. (執行期間錯誤 '7':記憶體不足以及有時候跟著發生磁碟操作錯誤)
Run-time error '430':Class does not support
Automation or does not support expected interface. (執行期間錯誤 '430':類別不支援
Automation 或不支援預期的介面。) Run-time error
'424':Object required. (執行期間錯誤 '424':需要物件)
Run-time error '-2147023170 (800706be)':Automation error.The remote procedure
call failed. (執行期間錯誤 '-2147023170 (800706be)':自動化錯誤。遠端程序呼叫失敗。)
Run-time error '-2147287010
(8003001e)':Automation error.This is a "A disk error occurred during a read
operation." based on ErrLook. (執行期間錯誤 '-2147287010 (8003001e)':自動化錯誤。依據 ErrLook
這是「讀取作業期間發生的磁碟錯誤」。) Additional server
processes (ThreadTest.EXE) are created even though the Instancing property of
Class1 is marked MultiUse. (即使 Class1 的 Instancing 屬性是標記為
MultiUse,還是建立了額外的伺服器處理序 (ThreadTest.EXE)) 狀況說明
這是原本設計的做法,在 Visual Studio 6 Service Pack 5 中,如果專案包含任何 具有 MTSTransactionMode 不是設定為 0 的公用類別,則會自動選取 [自主式執行] 選項和 [保留於記憶體中] 選項。 其他相關資訊重現問題的步驟答:建立伺服器
B:建立用戶端並測試
C:實作解決方案
如果您想要在 MTS 或 COM+ 下使用 ActiveX 元件,請不要使用 [GlobalMultiUse Instancing] 類別屬性。GlobalMultiUse 物件的介面是在個別執行緒的表格中快取,並且在執行緒終止時才能釋放出來。因此,如果傳來某個具有不同內容的呼叫 (雖然是在同一個執行緒上),此呼叫會因 RPC_E_WRONG_THREAD 而失敗。如果要在 MTS 與 COM+ 中使用元件,您應該要以物件沒有狀態的方式設計類別。 這篇文章中的資訊適用於:
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。 | 其他資源 其他支援網站社群立即取得協助文章翻譯
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email
回此頁最上方
