Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Fortran > [Tools] Windows-приложение под Fortran


Автор: OlikFleur 16.12.2010, 23:39
Здравствуйте!

Я обычно пишу приложения на Фортране под DOS. Сейчас захотелось научиться писать Windows-приложения. В книге Васильченко нашла вот такой пример Windows-приложения:

Код

module parameters
integer N
real(8) x1,x2,xi,a,b,h,sum
end module parameters

integer function WinMain(hInstance, hPrevInstance, lpszCmdLine, nCmdShow)
!DEC$ ATTRIBUTES STDCALL, ALIAS : '_WinMain@16' :: WinMain
use dfwina
integer hInstance, hPrevInstance, nCmdShow, lpszCmdLine
    call integral
WinMain=0
return
end

subroutine integral
use parameters
N=100
x1=1.0d0
x2=2.0d0
a=1.0d0
b=0.0d0
call CalculateIntegral
write(*,*) 'Value of the integral = ', sum
return
end

subroutine CalculateIntegral
use parameters
external FunctionValue
sum=0.0d0
h=(x2-x1)/(N-1)
do i=1,N
    xi=x1+(i-1)*h
    sum=sum+FunctionValue(xi)
end do
sum=sum*h
return
end

function FunctionValue(x)
use parameters
real(8) x
FunctionValue=a*x+b
return
end


Но откомпилировать не получается:

Код

1>ifqwin.lib(qwkentry.obj) : error LNK2005: _WinMain@16 already defined in WinMain.obj
1>libifcoremt.lib(for_main.obj) : error LNK2019: unresolved external symbol _MAIN__ referenced in function _main
1>Debug\QWtest.exe : fatal error LNK1120: 1 unresolved externals


Подскажите, пожалуйста, в чем проблема.


Автор: FCM 17.12.2010, 10:32
А тип проекта какой выбран?

Автор: OlikFleur 17.12.2010, 14:52
QuickWin Application, использую 2005 Студию, компилятор 11.0.074. 

Автор: FCM 17.12.2010, 18:27
Нужно наверное  Empty Windows Application

Возможно еще, что имена встроенных модулей в Intel Visual Fortran могут слегка отличаться, по сравнению с описываемым у Васильченко Compaq Visual Fortran
Вместо dfwin нужно по видимому ifwin

Автор: OlikFleur 17.12.2010, 19:09
Попробовала сделать приложение через Windowing Application -> Empty Project

Откомпилировалось, но я получила ошибку:

http://savepic.ru/2096479.htm

Посмотрела Help для Fortran, определение функции WinMain описывается так же, как и у Васильченко.

Автор: FCM 17.12.2010, 19:17
Заменили dfwina на  ifwin?

Автор: OlikFleur 17.12.2010, 19:21
Да.

Стала проверять программу без рассчета интеграла (как в тестовом примере), вроде ошибок нет, значит проблема с кодом для рассчета. Но с этим я уже разберусь.

Большое спасибо за подсказку!

Автор: FCM 17.12.2010, 19:30
Возможно, вот это в данном приложении не проходит
write(*,*) 'Value of the integral = ', sum

Первая * вывод "на конcоль" , а здесь Windows-приложение

Автор: OlikFleur 17.12.2010, 19:38
Цитата(FCM @ 17.12.2010,  19:30)
Возможно, вот это в данном приложении не проходит
write(*,*) 'Value of the integral = ', sum

Первая * вывод "на конcоль" , а здесь Windows-приложение

Вы абсолютно правы, именно это вызывало ошибку.

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