Появляется сообщение об ошибке «Ошибка системы & H80004005» из приложения Visual Basic 6.0 при MFC ActiveX управления подклассов какого класса окна реализуется путем Comctl32.dll

Переводы статьи Переводы статьи
Код статьи: 223152 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Проблема

MFC ActiveX контроля, подклассы любого окна классы реализованных Comctl32.dll вызывает исключение, ошибка в Visual Basic 6.0 exe-файл.
Системная ошибка» & H80004005 (-2147467259). Неопределенная ошибка"
Отладочной версии ActiveX, элемент управления вызывает метод ASSERT в файле Ctlcore.cpp, в конце COleControl::CreateControlWindow на или около строки 662.

Эта проблема возникает только при построении EXE-файла из Visual Basic 6.0 и запустите его из вне среды разработки Visual Basic.

Причина

Исполняемые файлы Microsoft Visual Basic не инициализируются Общие библиотеки элементов управления (Comctl32.dll) по умолчанию, что приводит к CreateEx Вызов сбоя в COleControl::CreateControlWindow. Вызов GetLastError() дает 0x0000057F - не удается найти класс окна показывает общий элемент управления библиотека должна инициализироваться явно.

Решение

Внутри InitInstance элемента управления ActiveX, убедитесь, вызов метода:
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. В разделе Параметры элементов управления (шаг 2 из AppWizard Visual C++ 6.0 AppWizard), в подкласс класс окна, выберите один из следующее: 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 - Последний отзыв: 4 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Foundation Class Library 4.2 на следующих платформах
    • Microsoft Visual Basic 5.0 Learning Edition
    • Microsoft Visual Basic 5.0 Professional Edition
    • Microsoft Visual Basic 6.0 Professional Edition
    • Microsoft Visual Basic 5.0 Enterprise Edition
Ключевые слова: 
kberrmsg kbtshoot kbcmnctrls kbctrl kbprb kbmt KB223152 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:223152

Отправить отзыв

 

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