C++调用Fortran程序----动态链接方式
来源:互联网 发布:阿甘起源哥谭网络 编辑:程序博客网 时间:2024/04/28 05:48
参考http://yxbwuhee.blog.sohu.com/143577510.html
一、C++动态调用Fortran DLL
(1)创建FORTRAN DLL工程,生成forsubs.dll文件供调用。
! 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(*,*)"Mixed calls succeed!"ENDSUBROUTINE 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
注意:!DEC$ ATTRIBUTES DLLEXPORT::Fact这一句很重要,如果没有这一句的话,C++程序找不到这个接口。
(2)创建win32 console application,调用forsubs.dll。
/* File CMAIN.C *///C++显式调用FORTRAN动态链接库#include <stdio.h>#include <iostream.h>#include <windows.h>main(){ //声明调用约定 typedef int (_stdcall * FACT)(int n); typedef void (_stdcall * PYTHAGORAS)(float a, float b, float *c); //加载动态库文件 HINSTANCE hLibrary=LoadLibrary("forsubs.dll"); if(hLibrary==NULL) { cout<<"can't find the dll file"<<endl; return -1; } //获得Fortran导出函数FACT的地址 FACT fact=(FACT)GetProcAddress(hLibrary,"FACT"); if(fact==NULL) { cout<<"can't find the function file."<<endl; return -2; } //获得Fortran导出函数PYTHAGORAS的地址 PYTHAGORAS pythagoras=(PYTHAGORAS)GetProcAddress(hLibrary,"PYTHAGORAS"); if(pythagoras==NULL) { cout<<"can't find the function file."<<endl; return -2; } float c; printf("Factorial of 7 is: %d\n", fact(7)); pythagoras (30, 40, &c); printf("Hypotenuse if sides 30, 40 is: %f\n", c); FreeLibrary(hLibrary); //卸载动态库文件 return 0;}
二、调试Fortran DLL
设置Fortran程序的项目属性,Debugging->Command中,设置为测试程序的EXE文件路径。
设置Command之后,直接调试Fortran DLL 项目即可。
0 0
- C++调用Fortran程序----动态链接方式
- C直接调用Fortran 非链接库方式
- 【转载】Fortran调用C程序
- VC 中调用Fortran动态链接库函数开发说明
- C/C++/Fortran混合编程浅谈------直接链接方式
- .Net(c#) 通过 Fortran 动态链接库,实现混合编程
- [Lua]Lua调用C/C++函数/库(动态链接方式)
- 动态链接库调用方式
- 如何在liunx下编译一个调用到c语言开发的动态库(so文件)的fortran程序。
- Fortran调用C语言小计
- 动态链接库两种调用方式的比较
- 动态链接库两种调用方式的比较
- 动态链接库两种调用方式的比较
- 用php的c扩展编程调用 c程序的动态链接库
- 用php的c扩展编程调用 c程序的动态链接库
- lua入门之三:lua调用c/c++库(动态链接方式)
- VB调用C程序的方法—动态链接库法
- jnative在linux下对c程序的动态链接库的调用问题及解决方案
- How to upload / import a mysql phpmydadmin database of more than 2MB
- UEditor正在读取目录及网络链接错误 ,上传图片等附件都出现红叉
- zoj 2028
- 约瑟夫问题的解法
- 第九章 9.3.1节练习
- C++调用Fortran程序----动态链接方式
- android 应用图标大小
- IOS学习之十七:Grand Central Dispatch(GCD)编程基础
- 采用不同的方法实现回文数的判断
- Eclipse 安装最新SVN插件
- hdoj 2068 RPG的错排
- TimedEventQueue分析
- 展讯SC7730 Camera兼容引起的打开失败问题
- VS2005 Manifest 配置问题总结