|
3 / 3 / 0
Регистрация: 15.05.2015
Сообщений: 72
|
|
Обработка ошибок на этапе запуска программы26.02.2024, 11:31. Показов 1187. Ответов 20
Метки нет (Все метки)
Добрый день, коллеги-программисты.
Уткнулся в проблемку, не знаю как решить. Надеюсь на ваши подсказки. Собрал я программку с компонентами, которые далеко не на всех компах с Windows7 установлены в системе по-умолчанию. Понятное дело - батник, запущенный через правый клик от имени администратора решает проблему... Однако не всякий юзер на такое способен или тем более читает мои инструкции, приложенные к программе. Но вот когда у него при запуске моей проги вылазит окошко с красным крестиком и текстом на импортном типа: "Control COMDLG32.OCX does not installed.... бла бла бла..." он начинает мне выносить мозг. И он такой не один. Я хотел бы сделать программу юзер-френдли. Чтобы при отсутствии в системе необходимых контролов она на человеческом языке сообщала об этом и предлагала нажатием ОК их сразу установить. Да вот только проверка наличия этих контролов происходит раньше, чем обрабатывается сам код обработки условия/ошибки из Form_Load() или Form_Initialize(). Может запихать код обработки в модуль? Это даст что-нибудь? Модули грузятся раньше формы? Или это бестолку?
0
|
|
| 26.02.2024, 11:31 | |
|
Ответы с готовыми решениями:
20
Как добавить анонимный тип в объект не на этапе компиляции, а на этапе выполнения программы? Надо для routes.MapRoute Подключение MODF - 1427 ошибок на этапе сборки
|
| 26.02.2024, 11:55 | |
|
MrRoxMJ, здравствуйте
Вообще не понимаю проблемы. Проверяйте библиотеки на наличие — при запуске Excel и всё.
0
|
|
|
3 / 3 / 0
Регистрация: 15.05.2015
Сообщений: 72
|
|||||||
| 27.02.2024, 10:30 [ТС] | |||||||
|
код типа такой:
0
|
|||||||
| 27.02.2024, 11:29 | ||
Сообщение было отмечено MrRoxMJ как решение
Решение
3
|
||
|
Модератор
|
|
| 27.02.2024, 11:43 | |
|
Можно просто сделать SxS-Reg-Free манифест через специальную утилиту и просто положить все OCX/DLL в папку с программой. А вообще testuser2 правильно написал - если хотите регистрировать, регистрируйте в Main, до создания форм и внешних ActiveX объектов. Чтобы зарегистрировать необязательно создавать bat файл. Достаточно либо запустить через Shell "regsvr32" либо напрямую подгрузить DLL и вызвать DllRegisterServer. Нужно учесть что для регистрации нужны права админа, поэтому в утилиту нужно будет добавить манифест соответствующий, либо сделать ключи запуска через runas.
1
|
|
|
3 / 3 / 0
Регистрация: 15.05.2015
Сообщений: 72
|
||||||
| 27.02.2024, 16:08 [ТС] | ||||||
наверно я чёта не так делаю...Перенёс весь "стартовый код" в модуль Module1. В качестве Startup object в свойствах проекта указал Sub Main. В модуле создал:
0
|
||||||
|
3 / 3 / 0
Регистрация: 15.05.2015
Сообщений: 72
|
|
| 28.02.2024, 12:22 [ТС] | |
|
Разобрался, там был мой косяк в коде. Исправил, и... УРА! Заработало!
![]() Кстати, я так понял, можно просто писать Sub Main(), без слова Private. testuser2, спасибо.
0
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
||||||
| 01.03.2024, 21:25 | ||||||
|
Но самым лучшим вариантом это будет отказ от зависимостей. COMDLG32.OCX это прошлый век.
Добавлено через 10 минут Или если лень переписывать программу на более правильный код, без зависимостей, то можно так:
0
|
||||||
|
3 / 3 / 0
Регистрация: 15.05.2015
Сообщений: 72
|
|
| 02.03.2024, 18:50 [ТС] | |
|
Именно - отказ от зависимостей. Я всегда стараюсь делать свои программы так, чтобы пользователю не приходилось ничего дополнительно устанавливать. Этакая "stand-alone portable".
Казалось бы - стандартное (майкрософтовское) диалоговое окошко для выбора папки при открытии/сохранении файла или распечатке. Эта функция есть в каждой винде. Однако при запуске проги на Windows 7 оно требует зарегистрировать компонент. Я пробовал пересобрать программу на более современной платформе - VB.Net. Специально для этого выбрал не из самых последних, а VisualStudio 10, как наиболее "совместимую" с Win7. Но там вскрылась другая проблемка - ущербные программисты майкрософта вместо того чтобы довести до ума OLE объект, его просто исключили. А у меня в программе для вывода диаграмм используется OLE. Ну окей, вместо OLE пересобрал на основе контрола MS Charts. В целом и внешне программка на .Net платформе выглядит симпатичней. ...Да вот только для запуска её на Win7 нужно установить пакет обновлений NetFramework4 (это по причине MSCharts). Я понимаю, мы живём современном мире где уже рулит Win10, и на Семёрке пакеты типа NetFramework4 или Офис (если мы выводим диаграммы и экспортируем их в эксель) - это маст-хэвные вещи. Однако если уж мы говорим за то, чтобы у программы не было зависимостей... Я решил, что в данной ситуации уж лучше пользователю просто прогнать regsvr понажимав три раза на Ok, чем устанавливать целый пакет обновлений на сотню мегабайт с перезагрузкой компа. Ну не могут блин рукожопы из майкрософта собрать нормальный компилятор, на котором можно было бы делать программы универсальные как для Win10, так и для Win7, или чтобы все необходимые библиотеки зашивались прямо в тело экзешника. Либо контролы без поддержки уникода, либо ОЛЕ удалили, либо.... Короче постоянные танцы с бубном.
0
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
||||
| 02.03.2024, 23:21 | ||||
|
Добавлено через 1 минуту Добавлено через 40 секунд Добавлено через 1 минуту Я уже говорил об этом тысячу раз, что COMDLG32.OCX для диалоговых окон использовать не надо. Вместо этого нужно использовать обычные API. Добавлено через 4 минуты Есть же простые API, например GetOpenFileName Lib "comdlg32.dll"
0
|
||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
||||||
| 02.03.2024, 23:22 | ||||||
|
Вот посмотри пример-проект для диалоговых окон, без единой зависимости. А сам файл comdlg32.dll есть в поставке любой версии Windows, в отличии от файла COMDLG32.OCX...
2
|
||||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
||
| 03.03.2024, 22:10 | ||
|
Добавлено через 4 часа 44 минуты testuser2, это же очень легко, при желании, переписать на W-функции, я лишь привёл пример, коих в Интернете тысячи... а так же, я неоднократно уже говорил на этом форуме и приводил много примеров, что нужно использовать API к comdlg32.dll для вызова диалоговых окон.
0
|
||
|
3 / 3 / 0
Регистрация: 15.05.2015
Сообщений: 72
|
||||||
| 04.03.2024, 16:22 [ТС] | ||||||
|
Коллеги, а вот вдогонку ещё один вопросик касаемо автономности программы:
Возможно ли заставить работать OLE Диаграмму Excel без установленного MS Office ? Благодаря Вашим подсказкам, (HackerVlad тоже спасибо за API касаемо comdlg32, я ещё покумекаю над этим кодом), программа успешно запускается. На машинах где установлен Office - упомянутый мной ранее OLE отображает диаграммы, всё как нужно. А вот на машинах где Офиса нет - при попытке отобразить OLE крашится с ошибкой: Run-time error '91': Object variable od With block variable not set. Если в коде заигнорить эту ошибку, то вижу, что OLE отображается: на странице диаграммы нарисована область построения с осями, на странице таблицы видна собственно экселевская сетка. Но нет данных. То есть "OLE Диаграмма" как контрол кагбэ автономен от Офиса. Проблема как его заставить работать. Стал разбираться с кодом:
![]() p.s. Я пробовал контрол MSCharts. Не в пример быстрее OLE работает, но в VB6 уж больно он убогий... Даже подписи к осям почти нечитабельные, шрифт не меняется.
0
|
||||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 04.03.2024, 16:45 | |
|
0
|
|
|
3 / 3 / 0
Регистрация: 15.05.2015
Сообщений: 72
|
|
| 04.03.2024, 17:52 [ТС] | |
|
0
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 04.03.2024, 23:51 | |
|
MrRoxMJ, да я никогда таким не занимался, если честно, чтобы вам что-то подсказать, но может The Trick что знает...
0
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 05.03.2024, 08:13 | |
|
MrRoxMJ, вы бы проект приложили я бы больше тогда сказал
0
|
|
|
3 / 3 / 0
Регистрация: 15.05.2015
Сообщений: 72
|
|
| 05.03.2024, 09:51 [ТС] | |
|
Чтобы лишним кодом не перегружать, выделил проблему в отдельный простой проектик.
Динамическая OLE диаграмма на форме. Приложил даже экзешник (если в нём проблема, может не так настройки делаю при компиляции, там всё по-умолчанию стояло). На компе с Офисом - диаграмму отображает. На компе без Офиса - пустая сетка. Если строчку "On error..." закрыть, то на машине без Офиса вылезет, собственно, сама ошибка: Run-time error '91': Object variable or With block variable not set.
0
|
|
| 05.03.2024, 09:56 | |
|
MrRoxMJ, диаграммы Excel это внутренние объекты пространста Excel, т.е. семейства его объектов. Чтобы перенести (попытаться) ole-объекты , нужно переносить вместе прогой, как я думаю, главную библиотеку Excel. А главной библой Экселя является его ексешник, возможно еще какие-то зависимости. Но при всем при том, на компе без установленного МС офиса надо будет зарегать библиотеку(и) Экселя, для чего могут понадобиться админские права.
0
|
|
| 05.03.2024, 09:56 | |
|
Помогаю со студенческими работами здесь
20
Создание программы на начальном этапе Сортировка на этапе индексации, а на этапе запроса выдавать готовый отсортированный вариант
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc
О Господи, Вечный, Ты . . .
Я помоги, Бесконечный. . .
Я прошу Ты. . .
Я погибаю, спаси. . .
Я прошу Тебя Вечный. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
|
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|