fcode 发表于 2017-1-3 13:06
楼上的例子非常的古老,建议用新的语法 ISO_C_Binding 实现混编。
本论坛有很多例子:
http://bbs.fcode.cn ...
tupian1.jpg (16.94 KB, 下载次数: 326)
tupian2.png (20.1 KB, 下载次数: 322)
zhuhuanlai 发表于 2017-1-3 12:45
http://www.3lian.com/edu/2012/04-14/25509.html
有比较详细的例子
vvt 发表于 2017-1-3 20:09
不需要额外设置,在这个例子里。你需要把 C 语言编译出来的 obj 放入工程,才能链接。
并且这个例子是 for ...
图片1.png (14.42 KB, 下载次数: 320)
图片2.png (31.82 KB, 下载次数: 314)
图片3.png (11.54 KB, 下载次数: 324)
图片4.png (30.58 KB, 下载次数: 346)
Program void
use ISO_C_BINDING
implicit none
interface
subroutine print_a(s,a) bind(C,name='print_a_')
import
type(C_FUNPTR) , value :: s
type(C_PTR) , value :: a
end subroutine print_a
subroutine ss(a) Bind( c , Name = "ss_" )
implicit none
integer a
end subroutine ss
end interface
integer , target :: a = 256
call print_a( c_funloc(ss) , c_loc(a) )
print * , a
end program void
!************************************
! 需要传递的子程序如下:
!************************************
subroutine ss(a) Bind( c , Name = "ss_" )
implicit none
integer a
a = a + 1
print *,'a=',a
end subroutine ss
#include <stdio.h>
extern void ss_(int a); //我自己写的传递进来的ss子程序
void print_a_(void* t, int a){
// int b=(int)t;
ss_(a); //调用传递进来的子程序
// printf("ct_=%p\n",t);
printf("ca=%d\n", a);
}
欢迎光临 Fortran Coder (http://bbs.fcode.cn/) | Powered by Discuz! X3.2 |