0 / 0 / 0
Регистрация: 28.08.2014
Сообщений: 3
|
|
1 | |
Ошибка выполнения CWnd::CreateControl в x64 системе28.08.2014, 11:18. Показов 1258. Ответов 4
Метки нет (Все метки)
Написал 32-х разрядное приложение на базе MFC, которое использует ActiveX элемент управления. Всё работало отлично, пока не запустил его на 64-х разрядной системе: выяснилось, что метод CWnd::CreateControl возвращает FALSE. Вот знать бы хоть что находится в HRESULT... вызов GetLastError() упорно возвращает значение 126(0x7E), но я не уверен в его честности: при работе с COM-объектами номер ошибки может быть неактуальным. Не знаю в чём дело! Гуглил, в надежде, что с проблемой сталкивался не я один, но безрезультатно. Для теста пробовал создавать другие ActiveX-контролы, но ошибка для x64-систем повторяется одинаково для всех. В x86 всё работает нормально, независимо от того XP или 7-ка.
0
|
28.08.2014, 11:18 | |
Ответы с готовыми решениями:
4
X64 версии программ на x32 системе Поиск файла по известных системе путях (в x64 ОС) CreateControl в другом потоке (Invoke) Переделать VB6 скрипт x32 с поддержкой в x64 системе |
Ушел с форума
|
|
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
|
Ушел с форума
|
|
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 | |
28.08.2014, 14:14 | |
Помогаю со студенческими работами здесь
5
Артефакты в видео в операционной системе WInodws 10 x64 LSTB Windows 8(x64) Общий доступ к принтеру,который подключен к системе ХР Возможно ли из приложения x86 попасть в директорию System32 на операционной системе (x64) Как в x64 системе обойти редиректинг в реестре? Что за API-функция RegDisableReflectionKey? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |