module cprog
interface
integer function SWMMSTEP(elpTime)
!DEC$ ATTRIBUTES C, ALIAS:'swmm_step'::SWMMSTEP
!DEC$ ATTRIBUTES REFERENCE::elpTime
real(kind=8)::elpTime
end function
end interface
real(kind=8)::elpTime !全局变量
end module cprog
program F90useVCdll
use cprog
implicit none
integer::errorNum
do !do_01
errorNum=SWMMSTEP(elpTime)
if ((elpTime <= 0.0).or.(errorNum .ne. 0)) exit
enddo
end program
int DLLEXPORT swmm_step(DateTime* elapsedTime)
{
...(代码太长)
*elapsedTime = NewRoutingTime / MSECperDAY;
return ErrorCode;
}
121212.jpg (12.69 KB, 下载次数: 352)
报错提示
module cprog
interface
integer function SWMMSTEP(elpTime) Bind(C,Name="swmm_step")
use , intrinsic :: ISO_C_Binding
real(kind=C_DOUBLE)::elpTime
end function
end interface
real(kind=8)::elpTime !全局变量
end module cprog
program F90useVCdll
use cprog
implicit none
integer::errorNum
do
errorNum=SWMMSTEP(elpTime)
if ((elpTime <= 0.0).or.(errorNum .ne. 0)) exit
enddo
end program F90useVCdll
fcode 发表于 2017-4-25 07:58
看起来似乎没有问题(在混编接口部分)。断点单步调试一下吧,也许是开源软件的事儿。
此外,你这种混编方 ...
2233.jpg (28.58 KB, 下载次数: 371)
提示错误
pasuka 发表于 2017-4-25 08:48
1、通过ISO C BINDING可以让C访问Fortran的全局变量,虽然不推荐,参考:
Interoperable Global Variables ...
winston2017 发表于 2017-4-25 09:03
1、在module那里定义的elpTime不是全局变量吗?为什么还需要按照这个来定义?
2、不好意思误导您了,贴出 ...
欢迎光临 Fortran Coder (http://bbs.fcode.cn/) | Powered by Discuz! X3.2 |