Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Fortran > Создать DLL с функциями форматирования фортрана?


Автор: mDmitriy 4.3.2013, 14:15
Приветствую, All!

Нужна DLL, которая реализовывала бы форматирование по-фортрановски.
Т.е., предоставляла бы возможность вызова функций типа string -> double и обратно double -> string

По задаче надо читать текстовый файл с фортрановским выводом вещественных чисел (типа 0.1555D-06), преобразовать данные и записать обратно.

DLL нужна для загрузки в .NET-приложение.

Посоветуйте, плиз, среду для фортрана (смотрю в сторону Intel, благо VS 2012 есть), как вообще реализовать подобное (в общих чертах) и как собирать DLL.

Спасибо.


Автор: FCM 7.3.2013, 19:21
Что касается DLL, один из простейших вариантов может быть следующим.
Создаешь в Visual Studio  c интегрированным Intel Fortran фортран-проект типа DLL.
В проекте создаешь .f90-исходник с текстом подпрограммы (или функции), которая делает нечто.
После заголовка подпрограммы указываещь директиву 
!DEC$ATTRIBUTES DLLEXPORT :: имя_подпрограммы

Строишь проект, получаешь .dll-файл и .lib-файл, причем
второй должен быть доступен С++ программе при линковке, а первый при выполнении программы.
В С++ программе описываешь прототип фортран-подпрограммы со спецификаттором extern "C"  и возможно спецификатором __declspec(dllimport)

НЕ знаю, подходит ли это для NET-приложений на С++ или там нужны другие варианты подгрузки DLL.

Насчет конвертации чисел в строки и обратно - не совсем понятна суть задачи. И почему символ D при степени. По моему, при записи из фортран-программы в файл REAL(8)-чисел результативно степень оказывается записанной через E   или я чего-то подзабыл?

Автор: mDmitriy 7.3.2013, 20:53
Цитата(FCM @ 7.3.2013,  19:21)
Что касается DLL, один из простейших вариантов может быть следующим.
Создаешь в Visual Studio  c интегрированным Intel Fortran фортран-проект типа DLL.
В проекте создаешь .f90-исходник с текстом подпрограммы (или функции), которая делает нечто.
После заголовка подпрограммы указываещь директиву 
!DEC$ATTRIBUTES DLLEXPORT :: имя_подпрограммы

Строишь проект, получаешь .dll-файл и .lib-файл, причем
второй должен быть доступен С++ программе при линковке, а первый при выполнении программы.
В С++ программе описываешь прототип фортран-подпрограммы со спецификаттором extern "C"  и возможно спецификатором __declspec(dllimport)

НЕ знаю, подходит ли это для NET-приложений на С++ или там нужны другие варианты подгрузки DLL.

Насчет конвертации чисел в строки и обратно - не совсем понятна суть задачи. И почему символ D при степени. По моему, при записи из фортран-программы в файл REAL(8)-чисел результативно степень оказывается записанной через E   или я чего-то подзабыл?

Спасибо за ответ smile 
Как подгрузить созданную DLL - я разберусь.
Проблема как раз со строковым вводом/выводом вещественных чисел.
Я на Фортране когда-то писал и тоже думал, что там D при степени...
Но в моем случае там встречаются D, d & E smile 
Не говоря уж о странных форматах, типа 460.00E+05 и там же 0.461D+08

Поэтому и хотелоь бы иметь в DLL аналог функции WRITE (а лучше и READ), для которой можно было бы определить в параметрах строку формата и значение.

Автор: FCM 10.3.2013, 18:50
Цитата(mDmitriy @  7.3.2013,  20:53 Найти цитируемый пост)
Проблема как раз со строковым вводом/выводом вещественных чисел.

Не совсем понятно, в чем проблема.
Можно в фортран-программе считать данные в свободном формате  и записать  их в свободном же формате в другой файл - должно получиться с символом E при степени. 
А с символом E при степени  C++ программа может напрямую работать.

Добавлено через 3 минуты и 13 секунд
Цитата(mDmitriy @  7.3.2013,  20:53 Найти цитируемый пост)
Я на Фортране когда-то писал и тоже думал, что там D при степени...

D при степени указывается для буквально заданных констант типа REAL(8)  и это правильно.
Но в результате записи в файл (по крайней мере в свободном формате) должен получаться символ E при степени

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)