文章編號: 122488 - 上次校閱: 2003年12月8日 - 版次: 3.0

PRB: 如何使用自動化錯誤程式碼說明從 Visual Basic (& I)

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

在此頁中

全部展開 | 全部摺疊

徵狀

Visual Basic 3.0 版並不報告自動化錯誤所造成的 OLE 自動化例外狀況。而是,它報告 440 一個 err 數值,並說明字串的 OLE 自動化例外。實際 wCode 以傳址方式傳遞自動化伺服器將會遺失。

狀況說明

這種行為是經過設計的 Visual Basic 3.0 版。Visual Basic 以包含在 Excel 5.0,版 Visual Basic 4.x 及以後,和其他 Microsoft 產品中的應用程式正確地傳回 wCode。

其他相關資訊

當一個 MFC 自動化伺服器就會擲回 OLE 分派例外狀況由呼叫 AfxThrowOleDispatchException 時,是內建類別 COleDispatchException 的物件。它的成員變數包括一個 OLE SCODE、 說明內容、 字串錯誤描述和 wCode (使用 Visual Basic 的整數碼)。

唯一的 Visual Basic 自動化控制站會保留資訊就是字串描述。不過,MFC OLE 自動化伺服器可以保留用於對 AfxThrowOleDispatchException() 呼叫中的資訊,並公開 (Expose) 的其他 [說明] 方法時,使用此資訊提供給使用者的說明。從 Visual Basic 的錯誤處理程式碼,內 Err 是 440、 Error(Err) 是 「 OLE 分派例外 」,而錯誤 $ 是實際伺服器所傳遞的字串。

範例程式碼片段

/* Compile options needed:
   standard MFC OLE project generated by AppWizard*/ 
				
  1. 分派例外狀況會擲回的 「 自動化 」 伺服器中方法應該為自動化物件在這個函式中的成員變數保留說明內容和 wCode:
       void CMyObject::Exception()
       {
          m_nIDContext = <some context>;
          m_nSomeCode = <some code>;
          AfxThrowOleDispatchException(m_nSomeCode,"String",m_nIDContext);
       }
    						
  2. 「 自動化 」 伺服器應該公開 (Expose) 與實際內容從這段程式碼中的例外狀況開始 WinHelp 或另一個說明引擎使用那些成員變數的方法:
       short CMyObject::GetError()
       {
          // From here you can use the member variable code
          // and context to start WinHelp or do whatever
          // help code you need to do ...
          AfxGetApp()->WinHelp(m_nIDContext);
          return m_nSomeCode;
       }
    						
  3. Visual Basic 的錯誤處理常式在分派例外狀況發生時,應該在 「 自動化 」 伺服器中呼叫公開的錯誤方法。以下是 Visual Basic 程式碼範例:
       Sub Command1_Click ()
          On Error GoTo EHandle
          Dim a As object
          Set a = CreateObject("TestAuto")
          ' Next line causes exception:
          a.exception
       EHandle:
          Msg = "The error message for error number "
          Msg = Msg & Err & " is:" & NL & NL
          Msg = Msg & """" & Error(Err) & """"
          MsgBox Msg  ' Display message.
          ' Next line starts WinHelp engine by calling method in server.
          a.GetError
          Exit Sub
       End Sub

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