0 / 0 / 0
Регистрация: 28.08.2014
Сообщений: 3
1

Ошибка выполнения CWnd::CreateControl в x64 системе

28.08.2014, 11:18. Показов 1258. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написал 32-х разрядное приложение на базе MFC, которое использует ActiveX элемент управления. Всё работало отлично, пока не запустил его на 64-х разрядной системе: выяснилось, что метод CWnd::CreateControl возвращает FALSE. Вот знать бы хоть что находится в HRESULT... вызов GetLastError() упорно возвращает значение 126(0x7E), но я не уверен в его честности: при работе с COM-объектами номер ошибки может быть неактуальным. Не знаю в чём дело! Гуглил, в надежде, что с проблемой сталкивался не я один, но безрезультатно. Для теста пробовал создавать другие ActiveX-контролы, но ошибка для x64-систем повторяется одинаково для всех. В x86 всё работает нормально, независимо от того XP или 7-ка.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.08.2014, 11:18
Ответы с готовыми решениями:

X64 версии программ на x32 системе
Я написал тестовый пример и отослал знакомому. У него стоит 32-разрядная версия Windows, и при...

Поиск файла по известных системе путях (в x64 ОС)
Привет всем! Скажите, а через PathFindOnPath к 64-битным папкам никак не пробиться? Придется...

CreateControl в другом потоке (Invoke)
UserControl uc1 = AddEducation.Instance; UserControl uc2 = AddParents.Instance; ...

Переделать VB6 скрипт x32 с поддержкой в x64 системе
Подскажите, пожалуйста, как поменять код DLL ниже, чтобы он работал и на 32, и на 64 битах.:...

4
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
28.08.2014, 11:52 2
Первое, что сразу приходит на ум: приложение 64-битное, ActiveX 32-битный.
Или наоборот. В этом случае создание объекта (CoCreateInstance) будет
завершаться с ошибкой (класс не зарегистрирован).
0
0 / 0 / 0
Регистрация: 28.08.2014
Сообщений: 3
28.08.2014, 12:07  [ТС] 3
Нет, приложение 32-битное и ActiveX 32-битный. Железно. Да иначе бы оно вообще никак не работало, а тут как раз зависит от разрядности операционки: в 32-х разрядных виндах работает, а в 64-х - нет.
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
28.08.2014, 12:13 4
Попробуйте на 64-битной системе создать объект через CoCreateInstance и
посмотреть, что возвращает функция.

Еще можно в CWnd::CreateControl пройтись отладчиком.
0
0 / 0 / 0
Регистрация: 28.08.2014
Сообщений: 3
28.08.2014, 14:14  [ТС] 5
Вызов CoCreateInstance - без ошибок. Также QueryInterface от полученного интерфейса удачно возвращает экземпляр IOleObject. Похоже, что для поиска ошибки ничего не остаётся кроме того, чтобы полностью пройти цепочку внедрения контрола без помощи MFC.

Добавлено через 32 минуты
Прошел весь путь от CoCreateInstance до DoVerb. В 32-х разрядной системе всё прошло "на ура", а в x64 DoVerb выдала 0x80004005 (E_FAIL), которая не диагностируется.
0
28.08.2014, 14:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.08.2014, 14:14
Помогаю со студенческими работами здесь

Артефакты в видео в операционной системе WInodws 10 x64 LSTB
UN2uKHp_0fU Система :AMD Ryzen 3 2200G Win 10 x64 LTSB В Windows 10 pro таких проблем нет. Как...

Windows 8(x64) Общий доступ к принтеру,который подключен к системе ХР
Такая проблема... есть принтер hp laserjet1000, который подключен к ХР, как сделать так что бы...

Возможно ли из приложения x86 попасть в директорию System32 на операционной системе (x64)
Доброго дня прошу подсказки Возможно ли из приложения написанного под 32 bit платформу попасть в...

Как в x64 системе обойти редиректинг в реестре? Что за API-функция RegDisableReflectionKey?
Есть такая функция - RegDisableReflectionKey. В Что нужно подключить в uses, чтобы ею...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru