Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка прототипа функции из DLL, Как предотвратить падение при ошибке 
:(
    Опции темы
jonie
Дата 3.6.2010, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



borisbn, и с одними и теми же параметрами компилятора..

Цитата

Ошибки, они везде бывают  smile И защититься от этого можно только полной изоляцией dll с plugin'ом (в другом процессе). Но это тормоз, нет - ТОРМОЗ, или даже ТОРМОЗИЩЕ  smile 

xvr, смотря что делает плагин, может ему надо всего-то послать сообщение "начни работать"


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
borisbn
Дата 3.6.2010, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 6
Всего: 135



Цитата(jonie @  3.6.2010,  15:15 Найти цитируемый пост)
borisbn, и с одними и теми же параметрами компилятора..

Да, конечно. Просто в своих классах/структурах/интерфейсах, передающихся между dll и exe всегда ставлю явное выравнивание ( pragma pack... ), явный тип вызова ( __stdcall или __cdecl ) и явный размер в enum'ах ( enumName_FORCE_DWORD = 0x7FFFFFFF ),
поэтому и забыл о параметрах компилятора smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
jonie
Дата 3.6.2010, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



borisbn, указанные опции не спасут тебя, если в коде stl стоит нечто вроде "#ifdef FAST_FLOAT ..." (т.е. внутренни шаблонные классы могут скопилиться по-разному даже если задать то что ты описал )


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
borisbn
Дата 3.6.2010, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 6
Всего: 135



jonie, полностью согласен, что stl нельзя передавать в/из dll. Я говорил о своих классах и структурах

Это сообщение отредактировал(а) borisbn - 3.6.2010, 20:09


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
null56
Дата 4.6.2010, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: нет
Всего: 12



Мне посоветовали наиболее быстрое решение предотвращения ошибки
Код

    __try
    {
// вызываем функцию с произвольным набором параметров
    }
    __except(EXCEPTION_EXECUTE_HANDLER)
    {
// обрабатываем исключение
    }

Надежный ли это вариант ловли вызова с неверными параметрами? у меня на тестовом примере исключение отрабатывает
PM MAIL   Вверх
Abyx
Дата 4.6.2010, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 2
Всего: 10



от неверного числа параметров это не поможет
PM MAIL   Вверх
Dem_max
Дата 4.6.2010, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



Цитата

от неверного числа параметров это не поможет


Ага, ошибка может и не выскочит, но не известно когда приложение свалится


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
null56
Дата 4.6.2010, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: нет
Всего: 12



просто я передавал и даже не передавал вообще параметры, вроде ловила она этот момент... но видимо это частный случай.... 

PM MAIL   Вверх
rogi08
Дата 4.6.2010, 12:33 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 18.2.2009

Репутация: нет
Всего: нет



А прокатит ли вариант с блоком 
Код

__try { }
__except(EXCEPTION_EXECUTE_HANDLER) { }
Если функция в dll перед работой будет предварительно тестить параметры, тем самым будем знать, где dll точно валится.

Это сообщение отредактировал(а) rogi08 - 4.6.2010, 12:33
PM MAIL   Вверх
GremlinProg
Дата 4.6.2010, 12:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(rogi08 @  4.6.2010,  14:33 Найти цитируемый пост)
Если функция в dll перед работой будет предварительно тестить параметры, тем самым будем знать, где dll точно валится.

проблема будет не обязательно в невалидных параметрах,

проблема будет при возврате из функции, когда эта функция как-либо потрет(изменит) стек, где по ее мнению расположен фрейм,
а на самом деле там будут переменные или фреймы основной программы,
состояние которых после вызова и будут определять, где конкретно свалится программа

чем больше будет потерто лишнего, тем больше переменных и фреймов основной программы будет влиять на то, где оно свалится,
так что в общем случае не спасет даже забор вложенных try-except


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
rogi08
Дата 4.6.2010, 13:07 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 18.2.2009

Репутация: нет
Всего: нет



подойдёт ли вариант с функцией SetUnhandledExceptionFilter?
PM MAIL   Вверх
Abyx
Дата 4.6.2010, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 2
Всего: 10



rogi08, вы ее когданить использовать пробовали?
вернее так:
пример кода покажите который решает задачу ТСа

Это сообщение отредактировал(а) Abyx - 4.6.2010, 13:13
PM MAIL   Вверх
rogi08
Дата 4.6.2010, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 18.2.2009

Репутация: нет
Всего: нет



Abyx, 
идею использования SetUnhandledExceptionFilter предложил punxer: http://wasm.ru/forum/viewtopic.php?pid=382029#p382029 
Судя на коду и комментариям, идея не подходит.
PM MAIL   Вверх
Abyx
Дата 4.6.2010, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 2
Всего: 10



rogi08, я тоже читаю васм, не надо сюда кидать ссылки %)
алсо какой смысл повторять чужие неверные идеи %)
PM MAIL   Вверх
rogi08
Дата 6.6.2010, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 18.2.2009

Репутация: нет
Всего: нет



Abyx
Цитата(Abyx @  4.6.2010,  13:59 Найти цитируемый пост)
я тоже читаю васм, не надо сюда кидать ссылки

ссылки выкладывал не лично для Вас))

Цитата(Abyx @  4.6.2010,  13:59 Найти цитируемый пост)
какой смысл повторять чужие неверные идеи

Это было лишь предположением, сверьте даты сообщений здесь и на васм.

Выскажите свою правильную и красивую идею.
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0550 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.