【混合编程实例】C/C++调用FORTRAN编写的DLL
来源:互联网 发布:电影网络院线发行联盟 编辑:程序博客网 时间:2024/04/30 06:49
之前都是用C/C++写好一些公用函数并将其包装在DLL中以供某应用模块调用,这
方面的教程在网络上一搜一大堆,以后再抽空在这里用实例简单地讲述一下。这次
是用FORTRAN写好几个函数然后编译成DLL,然后在C语言程序中使用。
1、首先是编写一段代码,这里给出一个例子
! forsubs.f90
! FUNCTIONS/SUBROUTINES exported from forsubs.dll:
! forsubs - subroutine
INTEGER*4 FUNCTION Fact (n)
!DEC$ ATTRIBUTES DLLEXPORT::Fact
INTEGER*4 n [VALUE]
INTEGER*4 i, amt
amt = 1
DO i = 1, n
amt = amt * i
END DO
Fact = amt
WRITE(*,*) "Call Fortran Sub...OK"
END ! Function Fact
SUBROUTINE Pythagoras (a, b, c)
!DEC$ ATTRIBUTES DLLEXPORT::Pythagoras
REAL*4 a [VALUE]
REAL*4 b [VALUE]
REAL*4 c [REFERENCE]
c = SQRT (a * a + b * b)
END ! SUBROUTINE Pythagoras
! EOF
以上!DEC$打头的两行,如第一个,其另一形式如下
!MS$IF .NOT. DEFINED(LINKDIRECT)
!MS$ATTRIBUTES DLLEXPORT::FACT
!MS$ENDIF
可分别替换之,而余下代码都是一样的。
2、如果你用的是诸如Intel Visual Fortran这样的IDE,那么
可以这样建立DLL框架([文件(File)]->[新建(New)]):
#define _MBCS
#endif
#include <iostream>
#include <windows.h>
using namespace std;
typedef void (__stdcall *PYTHAGORAS)(float a,float b,float* c);
{
if(hLibrary==NULL)
{
cout<<"Cannot open forsubs.dll"<<endl;
system("pause");
return -1;
}
FACT fact=(FACT)GetProcAddress(hLibrary,"FACT");
PYTHAGORAS py=(PYTHAGORAS)GetProcAddress(hLibrary,"PYTHAGORAS");
if(fact==NULL||py==NULL)
{
cout<<"Cannot find function"<<endl;
system("pause");
return -2;
}
cout<<" Fact(7)="<<fact(7)<<endl;
py(30,40,&c);
cout<<" Hypotenuse of 30,40 is "<<c<<endl;
FreeLibrary(hLibrary);
return 0;
}
#define _MBCS
#endif
#include <iostream>
using namespace std;
extern "C" {int _stdcall FACT (int n);}
extern "C" {void _stdcall PYTHAGORAS (float a, float b, float *c);}
{
float c;
cout<<" Fact(7)="<<FACT(7)<<endl;
PYTHAGORAS(30,40,&c);
cout<<" Hypotenuse of 30,40 is "<<c<<endl;
system("pause");
return 0;
}
- 【混合编程实例】C/C++调用FORTRAN编写的DLL
- Fortran与C混合编程,C调用Fortran函数,Fortran再回调C中的函数
- Fortran与C的混合编程
- FORTRAN/C/C++混合编程
- matlab/C混合编程--mex文件的编写、编译、调用
- windows下intel C/Fortran 混合编程
- windows下intel C/Fortran 混合编程
- FORTRAN/C/C++混合编程注意事项
- C#调用FORTRAN编写的DLL
- Fortran与C/C++的混合开发
- VC++调用Matlab编写的DLL(混合编程)
- C/C++/Fortran混合编程浅谈------直接链接方式
- c与matlab混合编程之dll调用
- 调用C语言编写的DLL文件
- 编写C#调用的C++DLL
- 编写C#调用的C++DLL
- JAVA JNI调用C编写的dll
- 编写C#调用的C++DLL
- 【CollabNet Teamforge】SVN库迁移到CTF
- POJ 1731 Orders
- codeigniter 错误提示Cannot modify header information - headers already sent by处理方法
- MAC系统安装/卸载cocos2d-x
- 关于装配体有限元分析概述
- 【混合编程实例】C/C++调用FORTRAN编写的DLL
- Bootstrap links (MEMO)
- “即刻搜索”使用率几乎为零
- oracle客户端sqlplus界面有乱码
- C++中的浅复制与深复制
- 搜索的未来
- MySQL 修改字段类型或长度
- 关于HashMap和LinkedHashMap
- embedded softAP+DHCP