Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Нужна помощь: Fortran и С++

16K
05 апреля 2006 года
forevern
6 / / 05.04.2006
Есть исходник программы на FORTRAN77. Программа считает нужные вещи, переписать 6000 строк кода не имею возможности и времени. Нужно создать графическую оболочку к этой программе в среде Borland C++. Задача, думаю, понятна: нужно обеспечить вызов из C++ процедуры на фортране, и возврат данных назад. Опишите, пожалуйста, подробно, каким образом это можно сделать. Вполне устроят и ссылки на то, где это толково описано, так сказать, "для чайников".
Спасибо.
299
05 апреля 2006 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by forevern
Есть исходник программы на FORTRAN77. Программа считает нужные вещи, переписать 6000 строк кода не имею возможности и времени. Нужно создать графическую оболочку к этой программе в среде Borland C++. Задача, думаю, понятна: нужно обеспечить вызов из C++ процедуры на фортране, и возврат данных назад. Опишите, пожалуйста, подробно, каким образом это можно сделать. Вполне устроят и ссылки на то, где это толково описано, так сказать, "для чайников".
Спасибо.



Скомпилируй в ДЛЛ прогу на фортране.

16K
05 апреля 2006 года
forevern
6 / / 05.04.2006
Цитата:
Originally posted by 3D Bob
Скомпилируй в ДЛЛ прогу на фортране.


Насколько я знаю, когда пишешь ДЛЛ, то ты указываешь явно dllexport или вроде того, а у меня код для экзешника. Так что надо чего-то другого:(

534
06 апреля 2006 года
HarryAxe
448 / / 19.01.2006
Цитата:
Originally posted by forevern
Насколько я знаю, когда пишешь ДЛЛ, то ты указываешь явно dllexport или вроде того, а у меня код для экзешника. Так что надо чего-то другого:(

А насколько я знаю, фортран компилит в те же obj файлы, что и C++. Твоя задача - скопировать obj файл в папку с проектом, переделать загодовок функции с фортрана на C++ и проинклудить его, предварительно подключив obj-файл с помощью #pragma comment(linker, "/include:имя_obj_модуля")

16K
06 апреля 2006 года
forevern
6 / / 05.04.2006
Цитата:
Originally posted by HarryAxe
А насколько я знаю, фортран компилит в те же obj файлы, что и C++. Твоя задача - скопировать obj файл в папку с проектом, переделать загодовок функции с фортрана на C++ и проинклудить его, предварительно подключив obj-файл с помощью #pragma comment(linker, "/include:имя_obj_модуля")



У меня еще есть проблема, у меня obj файл в COFF формате, а я хочу написать интерфейс в Borland C++, может подскажешь, какой фортрановский компилятор мне сделает obj в формате OMF.

13K
06 апреля 2006 года
poland
34 / / 16.01.2006
Цитата:
Originally posted by forevern
У меня еще есть проблема, у меня obj файл в COFF формате, а я хочу написать интерфейс в Borland C++, может подскажешь, какой фортрановский компилятор мне сделает obj в формате OMF.


Для конвертации существует утилита coff2omf.exe от Borland.

16K
06 апреля 2006 года
forevern
6 / / 05.04.2006
Все пробовал сам разобрать, как из С++ вызывать программы на Фортране, но ничего до сих пор не получилось.
Теперь линкер не может разобрать внешнюю процедуру. Привожу свой пример:
FORTRAN77

SUBROUTINE FR1(N,M)
M=N*N
RETURN
END

INTEGER FUNCTION FF1(N)
FF1=N*N*N
RETURN
END

Borland Builder C++

extern "C"
{
void _stdcall FR1(int*,int*);
int _stdcall FF1(int*);
}
int n=10 , nSq, nCube;
FR1(&n,&nSq);
Edit1->Text = IntToStr(nSq);
nCube = FF1(&n);
Edit2->Text = IntToStr(nCube);

[Linker Error] Unresolved external 'FR1' referenced from D:\FORTRAN\TEST1\UTEST1.OBJ
[Linker Error] Unresolved external 'FF1' referenced from D:\FORTRAN\TEST1\UTEST1.OBJ

Может у кого литературка есть соответсвующая.
[COLOR=red]+ Приводя код, не стесняйтесь использовать форматирование.
[/COLOR]
kot_
299
07 апреля 2006 года
3D Bob
885 / / 18.04.2005
Гля при помощи tdump названия ф-ций на в OBJ фортране.
534
07 апреля 2006 года
HarryAxe
448 / / 19.01.2006
Цитата:
Originally posted by forevern
Все пробовал сам разобрать, как из С++ вызывать программы на Фортране, но ничего до сих пор не получилось.
Теперь линкер не может разобрать внешнюю процедуру. Привожу свой пример:
extern "C"
{
void _stdcall FR1(int*,int*);
int _stdcall FF1(int*);
}
[Linker Error] Unresolved external 'FR1' referenced from D:\FORTRAN\TEST1\UTEST1.OBJ
[Linker Error] Unresolved external 'FF1' referenced from D:\FORTRAN\TEST1\UTEST1.OBJ

Может у кого литературка есть соответсвующая.


extern "C" писать не надо, это для библиотек. Точно линкеру obj-файл подсунул?

16K
07 апреля 2006 года
forevern
6 / / 05.04.2006
Цитата:
Originally posted by HarryAxe
extern "C" писать не надо, это для библиотек. Точно линкеру obj-файл подсунул?



Все оказалось довольно бонально: конвертор coff2omf сделал мне файл из нулей. Попробовал написать dll, получилось. Но еще исходник остался, работы еще валом:)

16K
09 апреля 2006 года
forevern
6 / / 05.04.2006
Пробою еще один вариант: утилткой f2c транслировать код с фортрана на С, но любой код она переваривает с ошибкой:(
Один из примеров, файл dot.f:
 
Код:
FUNCTION DOT(N, X, Y)
      INTEGER N
      REAL X(N), Y(N)
      DOT=0
      DO 10 I=1,N
   10 DOT=DOT+X(I)*Y(I)
      END


Ошибка следующая:
[color=red]dot.f:
dot:
Warning on line 6: missing final end statement
I/O error on c_file[/color]

Может кто пользовался этой утилткой, скажите в чем дело?
99K
25 мая 2018 года
1 / / 25.05.2018
Здравствуйте! Помощь Нужна разобраться в программе на Fortran платно
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог