Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Interop] HTTP запрос с помощью fortran 
:(
    Опции темы
mak77
Дата 2.9.2010, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Необходимо научить фортрановскую программу делать POST или GET запрос и получать ответ сервера. Возможно ли это? 
PM MAIL   Вверх
FCM
Дата 3.9.2010, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Может быть возможно - не знаю.
Во всяком случае, если это возможно из С/C++, то можно попробовать вызывать из фортран-программы соответствующие С/C++ - функции.
PM MAIL   Вверх
mak77
Дата 3.9.2010, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пытаюсь вызвать из фортрановской программы С/C++ - функцию (как это описано в книге Бартеньева Фортран: новые возможности), не получается.  
Может есть конкретный того, как это делается, какие файлы надо создавать, что и куда писать? 
PM MAIL   Вверх
FCM
Дата 3.9.2010, 19:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Покажи, свой нерабочий пример + какие компиляторы используются.
PM MAIL   Вверх
mak77
Дата 4.9.2010, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код фортрановской программы:

program fortmain 
interface 
subroutine find_ab2(a,b,g) 
!dec$attributes stdcall :: find_ab2 ! Атрибут подпрограммы 
!dec$attributes reference :: a, b ! Параметры a и b передаются по ссылке 
!dec$attributes value :: g ! Параметр g передается по значению 
real(4) :: a, b, g 
end subroutine find_ab2 
end interface 

real(4) :: a, b 

call find_ab2(a, b, -1.0) ! Первые 2 параметра передаются по ссылке 
print '(1x, 2f6.2)', a, b ! -2.00 3.00 
end


Код программы на СИ:
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{return 0;}

void _stdcall find_ab2(float *a, float *b, float g)
{*a = 2.0 * g; *b = 3.0;}     

Компилирую программу на СИ с помощью C++Builder 6. 
Вставляю созданнный после компиляции файл Unit2.obj в фортрановский проект.
Пытаюсь откомпилировать (Compaq Visual Fortran). Вот что пишет: 

\Unit2.obj : warning LNK4033: converting object format from OMF to COFF
ci.obj : error LNK2001: unresolved external symbol _find_ab2@12
Unit2.obj : error LNK2001: unresolved external symbol __setargv__
Release/ci.exe : fatal error LNK1120: 2 unresolved externals

Пытался также встаить в фотрановский проект непосредственно файл Unit.c, тоже не компилируется.

С СИ я совершенно не знаком. Добавил код (функция find_ab2) из книжки Бартеньева 
в стандартную заготовку консольного проекта.  
PM MAIL   Вверх
FCM
Дата 5.9.2010, 06:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если пользуешься Visual Fortran, то в пару ему естественно использовать не Borland, а Microsoft Visual C++. 

В твоем случае, должно быть что-то такое:

Код

program fortmain 
   interface 
      subroutine find_ab2(a,b,g) 
         !dec$attributes stdcall, decorate, alias : 'find_ab2'  :: find_ab2 
         !dec$attributes reference :: a, b 
         !dec$attributes value :: g
         real(4), intent(out)    ::  a, b
         real(4), intent(in)  ::  g 
      end subroutine find_ab2 
   end interface 

   real(4) :: a, b 

   call find_ab2(a, b, -1.0)  
   print '(1x, 2f6.2)', a, b 
end


Код программы на С:

Код

void _stdcall find_ab2(float *a, float *b, float g)
{*a = 2.0 * g; *b = 3.0;} 


или код программы на С++:
Код

extern "C" void _stdcall find_ab2(float *a, float *b, float g)
{*a = 2.0 * g; *b = 3.0;} 

либо
Код

extern "C" void _stdcall find_ab2(float & a, float & b, float g)
{ a = 2.0 * g; b = 3.0;} 




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


 




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


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

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