從 Visual Basic 6.0 應用程式時子的 MFC ActiveX 控制項類別任何視窗類別實作的 Comctl32.dll 收到"系統錯誤 & H80004005 」 錯誤訊息

文章翻譯 文章翻譯
文章編號: 223152 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

徵狀

MFC ActiveX 控制項的任何視窗類別所實作 Comctl32.dll 原因,從 Visual Basic 6.0.exe 擲回下列的錯誤的子類別。
"系統錯誤 & H80004005 (-2147467259)。未指定的錯誤 」
ActiveX 控制項的偵錯版本會導致檔案的結尾 COleControl::CreateControlWindow 上, 或附近行 662 的 Ctlcore.cpp 一個 ASSERT。

僅當您從 Visual Basic 6.0 中建置.exe 並執行它從 Visual Basic 開發環境外時,就會發生這個問題。

發生的原因

Microsoft Visual Basic 的可執行檔導致 [CreateEx 的預設不要初始化通用控制項程式庫 (Comctl32.dll) COleControl::CreateControlWindow 中失敗的呼叫。呼叫 GetLastError() 提供 0x0000057F-找不到表示一般的控制項程式庫必須明確地初始化的視窗類別。

解決方案

在您的 ActiveX 控制項 InitInstance,內進行到呼叫:
InitCommonControls(void)
InitCommonControlsEx(LPINITCOMMONCONTROLSEX lpInitCtrls)
這可確保 Comctl32.dll 載入,並初始化不論容器控制項在執行。

而非從控制項的程式碼呼叫 InitCommonControls,您也可以呼叫它直接從 Visual Basic 用戶端應用程式:
  • 為對應的表單 ; 做一般的宣告,例如:
    Private Declare Sub InitCommonControls Lib "comctl32.dll" ()
  • 新增的呼叫:
    InitCommonControls
    					
    Form_Load 方法中。
在某些情況下這可能是太遲初始化通用控制程式庫。因此,建議您在控制項的 InitInstance 中加入這個呼叫。

狀況說明

這種行為是經過設計規劃的。

其他相關資訊

重製行為的步驟

  1. 使用 Visual C++,MFC ActiveX 控制項精靈建立預設 ActiveX 控制項。
  2. AppWizard (Visual C++ 6.0 AppWizard 的 [步驟 2),視窗類別,若要建立子類別中的 [控制設定值] 區段中,選擇下列其中: msctls_hotkey32 msctls_progress32 msctls_statusbar32 msctls_trackbar32 msctls_updown32 SysAnimate32,SysHeader32 SysListView32 SysTabControl32 或 SysTreeView32。
  3. 建置控制項。
  4. 開啟 Microsoft Visual Basic 6.0 中,並建立新的標準 Exe 專案。
  5. 從 [專案] 功能表按一下 [元件],並選取您剛建立使用 Microsoft Visual C++] 控制項。
  6. 選取這個控制項,並繪製,在 [表單] 視窗。
  7. 從 [檔案] 功能表按一下 [製成 Project.exe,並建置在 exe]。
  8. 移至 Windows 檔案總管],然後執行這個可執行檔。

屬性

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

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com