|
|
|||||||||||
Как персонифицировать описание ошибки вызова метода COM-объекта в скомпилированном приложении?25.10.2014, 19:23. Показов 2315. Ответов 15
Метки нет (Все метки)
Здравствуйте!
Пример. Вот такой код:
"Method 'CurrentDirectory' of object 'IWshShell3' failed." Если его скомпилировать, получим: "Method '~' of object '~' failed." Понимаю, что не находит описания. Попытался установить в References ссылку на WScript.Shell (Windows Script Host Object (syswow64\wshom.ocx), переписав все так:
Спасибо за помощь.
0
|
|||||||||||
| 25.10.2014, 19:23 | |
|
Ответы с готовыми решениями:
15
Проблема вызова метода COM объекта из VB Передача всего объекта в метод Main для вызова метода Присвоение экземпляру объекта значения null вместо вызова метода Dispose() |
|
Супер-модератор
|
||||||
| 25.10.2014, 21:28 | ||||||
|
Dragokas, видите ли... Судя по ошибке, это следствие неверной установки подсистемы в PE-заголовке. Попробуйте сделать Ваше приложения консольным (т.е. скомпилируйте код, а exe-файл обработайте вот этим кодом):
0
|
||||||
|
|
|
| 25.10.2014, 22:56 [ТС] | |
|
Борис, может мы с Вами друг друга неверно поняли.
Мне нужно, чтобы в скомпилированном приложении я видел описания любых ошибок с COM-объектами точно в таком же виде, как и в режиме IDE. А еще хотелось бы знать, можно ли как-то еще больше деталей получать об ошибках (программа тестируется на чужих ПК). Нечто вроде записи дампа, состояние переменных, не перегромождая каждую функцию лишним отладочным кодом.
1
|
|
|
|
|||||||
| 27.10.2014, 07:19 | |||||||
|
Пока можно сделать вот так: Перевод ошибок автоматизации. У кодов ошибок есть диапазоны, которые относятся к разным участкам исполнения. В вашем случае, судя по всему, интерфейс IWshShell3 вызывает WinAPI функцию, которая выкидывает этот код ошибки.
Конкретно этот код означает неправильное имя устройства:
Добавлено через 9 часов 42 минуты Я у себя в программе писал все сообщения об ошибках в текстовой файл, который назвал Журналом ошибок. В главном меню в разделе Помощь сделал вызов notepad, который показывал этот файл. Так мне отправляли обратную связь в виде этого текстового файла.
0
|
|||||||
|
|
||
| 27.10.2014, 12:00 [ТС] | ||
|
Сейчас, чтобы узнать в каком месте функции возникает ошибка приходится расставлять по всему коду метки.
0
|
||
|
|
|||||||||||
| 27.10.2014, 13:36 | |||||||||||
|
А метки зачем? Можно Err.Raise использовать. Завести набор кодов ошибок своего приложения и обрабатывать исключения в общем обработчике.
Видел я как-то вот такой способ отладки большой портянки:
У меня в программе каждый обработчик ошибки пишет свой вывод в файл. По нему можно проследить что случилось. В .Net, кстати, если видели, показывается стек вызовов методов, но не указывается конкретное место в методе где произошёл сбой В парсере, который я недавно показывал, мне нужно было узнать самую первую ошибку, которая вызвала сбой. Для этого я складывал все ошибки в вектор и в вызывающем коде брал самую первую ошибку.
0
|
|||||||||||
|
|
|||
| 27.10.2014, 15:09 [ТС] | |||
|
Но я их, естественно, ставлю только, когда узнаю, что где-то в данной функции возникла ошибка. Снова отдаю программу пользователю, получаю более детальную инфу. Но это, имхо, неверный подход. А Err.Raise мне зачем, если я заранее не знаю, где может случится ошибка. Проверки и так стоят, где это возможно, но возникают разные нештатные ситуации при необычных входных данных и прочем. Примеры приводить не стану.
0
|
|||
|
|
|
| 27.10.2014, 15:38 | |
|
Err.Raise нужен, если данные на входе метода некорректные. К примеру, у нас метод выполняет операцию деления. Приходит ноль, а на ноль делить нельзя. Мы можем не делать проверку на ноль, а положиться на системный обработчик, либо мы можем явно проверить данные и сформировать исключение, если что не так. Для этого у приложения должны быть свои внутренние коды ошибок. Err.Raise должен будет возвращать их.
Не нужно дожидаться, пока что-то пойдёт не так. Методы классов должны брать на себя работу по проверке входных параметров и генерить исключения. То есть такой стиль должен быть выдержан во всём приложении, методы классов не должны быть большими, лучше пусть будет больше классов и методов, чем длина портянок (тел) методов. На самом деле не так просто отлаживать большую программу на vb6, если ещё не дай боже используются какие-нить нестандартные сабклассинги с хуками. У меня была проблема, я не мог запустить свою программу в IDE, так как использовались разные навороты. Приходилось вот только листингом ограничиваться и runtime. Хорошо, что в CodeSmart просто обработчики вставлять, вручную замаешься вписывать. Мне интересно как у других обстоят дела с комплексным подходом по сопровождению и поддержанию целостности программы. П. С. Кстати, если кому интересно, я изобрёл свой велосипед по автоматическому обновлению программы.
0
|
|
|
|
||||
| 27.10.2014, 16:02 [ТС] | ||||
|
которые заранее не были спрогнозированы разработчиком. Т.е. не вставишь же проверку там, где уверен, что ошибка не должна произойти ни при каких условиях. Например, если подать на вход Dir$ путь к точке повторной обработки, будет сгенерирована #52. Bad procedure call or argument. Я этого раньше не знал и никаких проверок в этой части не делал. Может, плохо пример, но все же... Часто пользуюсь безопасным сабклассингом от The Trick. Пока что этого хватало. А вот как сам The Trick отлаживает это интересно, ну кроме как через дебаггер.
0
|
||||
|
Модератор
|
|||
| 27.10.2014, 19:39 | |||
|
У меня практически никогда не возникает проблем с отладкой простых вещей как хуки, сабклассинги и т.п. документированные возможности. Если делать все по документации и понимать как это работает (а по другому нельзя применять эти средства), то никаких сложностей в отладке не будет. Самое главное правило: вместо F5 - Ctrl+F5 . Я даже вывел отдельно кнопку на панель. В таких случаях проблем компиляции не будет и хук или сабклассинг не "встанет" в среде. В твоем случае объект не поддерживает ISupportErrorInfo, поэтому в IDE описание ошибки получается исходя из библиотеки типов. В скомпилированном виде такие действия не выполняются.
0
|
|||
|
|
|
| 27.10.2014, 20:16 | |
|
У меня в программе есть несколько сторонних расширений, которые не работают в IDE. На этот случай у меня при запуске в IDE они отключаются автоматически. Но расширения эти напрямую влияют на функционал и без них работать не удобно. К примеру, стандартный msflexgrid не поддерживает работу с функциональными клавишами. Я был в шоке, когда узнал, что стрелки с ним использовать не могу. Пришлось приделывать. Потом ещё какие-то расширения и в сумме они валили мне IDE. Разбираться было долго и я плюнул на это дело, забив на отладку в IDE вообще. Отлаживать в ней можно, просто это становится бессмысленным без расширений.
Раз ты спрашиваешь, то я попробую, как будет время, собрать пример, который у меня валил среду. Может посоветуешь чего.
0
|
|
|
|
||||||||
| 27.10.2014, 23:51 [ТС] | ||||||||
|
С учетом кода расшифровки Automation Errors по ссылке уни,
теперь получился у меня такой обработчик: Кликните здесь для просмотра всего текста
0
|
||||||||
|
Модератор
|
|
| 28.10.2014, 10:47 | |
Сообщение было отмечено The trick как решение
Решение
Dragokas, почитай на досуге http://www.autopark.ru/ASBProg... _ERROR.HTM
3
|
|
| 28.10.2014, 10:47 | |
|
Помогаю со студенческими работами здесь
16
Описание параметров метода Add объекта Collection В скомпилированном приложении портится интерфейс Слетает положение контролов в скомпилированном приложении
Не могу использовать теги в скомпилированном приложении под windows Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1
У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\
А в самом низу файла-профиля. . .
|