Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Interop] Передача ошибок от DLL, Работа с DLL 
:(
    Опции темы
KrotOnline
Дата 3.10.2010, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Имеется форма(vb6) которая передает значения переменных для расчета fortran библиотеке. В библиотеке есть ряд условий правильности расчета(к примеру деление на ноль). 
Как сделать чтобы из любой части кода, по инициативе dll, передавались параметры переменных в форму?

PM MAIL   Вверх
FCM
Дата 3.10.2010, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вопрос конечно не простой. 
Цитата(KrotOnline @  3.10.2010,  13:10 Найти цитируемый пост)
В библиотеке есть ряд условий правильности расчета(к примеру деление на ноль).

Как эти условия реализованы?
PM MAIL   Вверх
KrotOnline
Дата 4.10.2010, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Что то подобное:
Код

if (a.eq.b) stop

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


Опытный
**


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

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



Многочисленные условия типа "if (a.eq.b) stop" - это конечно не есть хорошо (тем более, если a и b вещественные).

Есть некоторые подходы, которые могут иметь отношение решению проблемы. Если не ошибась, все эти подходы так или иначе связаны с механизмом генерации/обработки SEH-исключений. 
В общих чертах:
1) Если речь идет о до-интелловском Visual Fortran (например, Copmaq), то можно попробовать воспользоваться функцией, аналогичной С-функции _matherr, которая проявляет себя, когда возникает то или иное критическое условие - но нужно посмотреть список таких критических условий. 
2) Как правило по умолчанию при делении на ноль FPU проглотит эту неприятность и вернет что-нить типа Infinity. Можно заставить его генерировать исключение, которое будет перехватываться по видимому Fortran RTL обработчиками, причем при соответствующих настройках кроме диагностики будет проведена трассировка (т.е. указана строка исходника, содержащая неприятность).
3) Не помню как в Compaq, но в Intel можно попробовать воспользоваться IFPORT-процедурой SIGNALQQ, являющейся конвертом для С-функции signal, которая тоже имеет отношение к механизму исключений

Когда приложение чисто фортранное, то проще использоваться пункты 1 (Compaq) и 2 .
В случае же вызова fortran DLL из VB  - тут надо конкретно посмотреть (может быть подойдет только п.3). 

Опять же одно дело просто продиагностировать, и совсем другое  - организовать альтернативное поведение программы.

Это сообщение отредактировал(а) FCM - 4.10.2010, 13:12
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Fortran | Следующая тема »


 




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


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

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