文章編號: 896559 - 上次校閱: 2008年10月8日 - 版次: 2.4

FIX:Windows Common Controls Mscomctl.ocx 或 Comctl32.ocx 可能導致您的應用程式或 Visual Basic 6 IDE 意外結束,或可能收到「除以零」錯誤訊息

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
注意事項
Microsoft Visual Basic 6.0 的主要支援於 2005 年 3 月 31 日結束。Microsoft 發行的此套件與安全性無關,因其包含正準備在主要支援結束前發行的改良。Visual Basic 6.0 已轉換為延伸支援,而延伸支援會進行到 2008 年 3 月 31 日。Microsoft 將不再以任何方法延伸 Visual Basic 6.0 的主要支援階段。

在此頁中

全部展開 | 全部摺疊

徵狀

Microsoft Windows Common Controls 有兩個版本。Comctl32.ocx 包含 Windows Common Controls 5.0,並隨附於 Microsoft Visual Studio 5.0。Mscomctl.ocx 包含 Windows Common Controls 6.0,並隨附於 Visual Studio 6.0。此 Hotfix 會修正這些控制項中的下列重大錯誤。

Windows Common Controls 5.0:Comctl32.ocx

試想下列案例。
  • 您正在執行在 Microsoft Windows 2000 或較新的作業系統中設定 WinEvent hook 的應用程式。
  • 您從 Microsoft Windows Common Controls 5.0 ?動使用 ListView 控制項或 TreeView 控制項的應用程式。
在這種情況中,您的應用程式可能會意外地結束,或您可能會收到和下列類似的錯誤訊息:
Project1:Project1.exe - 應用程式錯誤
"0x202d0f51" 指令參考的 "0x40000001" 記憶體。該記憶體不能為 "written"。請按 [確定] 終止程式
注意一般來說,建立在 Microsoft Active Accessibility 上的協助工具應用程式會設定 WinEvent hook。例如,「朗讀程式」建立在 Microsoft Active Accessibility 上。不過,在 Microsoft Windows XP Tablet PC Edition 作業系統執行的公用程式也會設定 WinEvent hook。

Windows Common Controls 6.0:Mscomctl.ocx

如果您正在執行使用 Mscomctl.ocx 6.1.97.64 版或較新版本的應用程式,且程式包含的 ListView 控制項的 AllowColumnReorder 內容設為 True,則當您嘗試重新排序欄位時,會收到下列錯誤訊息:
Project1:Project1.exe - 應用程式錯誤
"0x27618848" 指令參考的 "0x016e1e90" 記憶體。該記憶體不能為唯讀。
根據您系統預設的偵錯工具安裝程式而定,您可能會收到「0xC0000094 Divide By Zero」(0xC0000094 除以零) 錯誤訊息或程式可能會意外地結束。

注意 若您在 Visual Basic 6 IDE 中執行程式,您也會同時遇到這兩種問題。

發生的原因

Windows Common Controls 5.0 所發生的問題是因為 Comctl32.ocx 嘗試使用具有 NULL 文字號碼的 LVI_IMAGE 遮罩複製 ListView 項目的文字號碼。

Windows Common Controls 6.0 所發生的問題是因為 6.1.97.64 版本的 Mscomctl.ocx 檔案變更。6.1.97.64 版本隨附於 Hotfix 826287 中。當 Visual Studio 6.0 在 Windows XP 或較新的作業系統電腦上執行時,6.1.97.64 版本的 Mscomctl.ocx 檔案會變更 ListView 控制項的行為。Mscomctl.ocx 中大部分的 ImageList 控制項呼叫均為定義於 Comctl32.dll 中的 ImageList 殼層通用控制項類別的呼叫包裝函式。不過,ImageList_GetImageRect 方法不會被包裝。此方法仍使用定義於 Mscomctl.ocx 檔案中的舊版 ImageList 結構和舊版 ImageList 控制項類別。此設計導致欄位重新排序作業期間發生除以零錯誤。

解決方案

重要 如果您執行的應用程式是由協力廠商提供,在安裝此修正程式之前,您可能會想與該協力廠商連絡。例如,程式並不是由您所開發。若您未充分測試便安裝此修正程式,應用程式可能會停止運作。

注意安裝隨附的修正程式之後,您無法將其解除安裝或移除。

您可以從「Microsoft 下載中心」下載下列檔案:
摺疊此圖像展開此圖像
下載
立即下載 Visual Basic 6.0 Common Controls 套件。 (http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&FamilyID=25437d98-51d0-41c1-bb14-64662f5f62fe)
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&FamilyID=25437d98-51d0-41c1-bb14-64662f5f62fe (http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&FamilyID=25437d98-51d0-41c1-bb14-64662f5f62fe)
如需有關如何下載 Microsoft 支援檔案的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
119591? (http://support.microsoft.com/kb/119591/ ) 如何從線上服務取得 Microsoft 支援檔案
Microsoft 已對這個檔案做過病毒掃描。Microsoft 是利用發佈當日的最新病毒偵測軟體來掃描檔案,看看有沒有病毒感染。檔案會儲存在安全的伺服器上,以避免任何未經授權的更改。

Microsoft 已提供 Visual Basic 6 SP6 的支援修正程式。
此 Hotfix 的英文版具有下表中所列的檔案屬性 (或較新的檔案屬性)。這些檔案的日期和時間是以 Coordinated Universal Time (UTC) 表示。當您檢視檔案資訊時,它會轉換為當地時間。如果要查看 UTC 與當地時間的差異,請使用 [控制台] 中 [日期和時間] 工具的 [時區] 索引標籤。
   日期         時間   版本            大小    檔名
   ------------------------------------------------------
18-Aug-2003  20:25  6.0.81.6   1,344,512  Comctl32.ocx     
02-Nov-2004  00:16  6.1.97.86  1,064,208  Mscomctl.ocx     

狀況說明

Microsoft 已確認<適用於>一節所列之 Microsoft 產品確實有問題。

其他相關資訊

如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
827217? (http://support.microsoft.com/kb/827217/ ) FIX:Windows 2000 或更新版本中 Comctl32.ocx 的存取違規
824684? (http://support.microsoft.com/kb/824684/ ) 說明 Microsoft 軟體更新的標準術語

這篇文章中的資訊適用於:
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Studio 6.0 Enterprise Edition
關鍵字:?
kbqfe kbvs600sp6 kbpending kbbug KB896559
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。