首先先说明一下题目把,为什么Fortran调用的是C动态库而不是C++?

C语言函数库的调用和C++函数库的调用是不一样的,其不同主要是由于C++相较于C的特性造成的。

举个栗子,C语言中一个函数名只能代表一个函数,C++中由于函数重载的存在一个函数名并不能唯一确定一个函数。

因此在调用函数库时也就注定着C和C++必定有所区别。

而Fortran是基于C标准的,所以只能调用C的动态库。(如果必须用C++编译器编译的话,可以加入extern "C",确保特定函数使用C规则编译

编译C动态链接库

首先在VS中新建动态链接库项目,添加.c文件(如果是cpp编译出来就不是C动态库了)

#include <stdio.h>
_declspec(dllexport) void _cdecl MYPRINT(double *x)
{printf("%lf",*x);
}

这里需要注意的一点就是堆栈管理规则

_stdcall:参数由右向左压入堆栈,堆栈由函数自己清理。

_cdecl:参数由右向左压入堆栈,堆栈由调用方清理。

msvc都是默认_stdcall的堆栈管理规则,Fortran是_cdecl,因此在输出函数库时应显式设置它。


对于编译生成的.lib和.dll的作用这里做一下简单的介绍:

.lib是用来编译使用的,用来说明库里有什么东西去哪里找

.dll就是你要找的那个东西

在编译过程中,只需要知道去哪里找就够了,等到程序运行的时候才需要dll出来干活

因此,如果不想额外添加路径的话,只需要将.lib复制到项目根目录,.dll复制到可执行文件的同级目录之下就可以了。


Fortran调用C动态链接库

在项目->属性->链接器->输入->附加依赖项 中加入需要调用的lib文件

program callcfunction
implicit none
interface function MYPRINT(x) bind(c,name='MYPRINT')use,intrinsic::iso_c_bindingreal(8)::xend function
end interfacereal(8)::xreal(4)::resultx=3.1415result = MYPRINT(x)
end program

注意:调用方的程序位数与版本需要与库保持一致

Fortran调用C动态链接库相关推荐

  1. Linux C语言调用C++动态链接库

    Linux C语言调用C++动态链接库 标签: C调用C++库 2014-03-10 22:56 3744人阅读 评论(0) 收藏 举报 分类: [Linux应用开发](48) 版权声明:本文为博主原 ...

  2. opencomm在c语言中的作用,使用OpenMPI从Fortran调用C语言

    我有一个编译时问题,我已经减少到以下测试用例.我希望从fortran调用一个C例程,让C例程知道MPI. 请考虑以下示例代码, Fortran主要: ! -- main.f90 program mai ...

  3. python库_python使用ctypes库调用DLL动态链接库_python

    最近要使用python调用C++编译生成的DLL动态链接库,因此学习了一下ctypes库的基本使用. ctypes是一个用于Python的外部函数库,它提供C兼容的数据类型,并允许在DLL或共享库中调 ...

  4. Java通过JNI调用C++动态链接库dll,并打在jar包内 ——JNA-JNI(一)

    Java通过JNI调用C++动态链接库dll,并打在jar包内--JNA-JNI(一) 系列文章: Java通过JNI调用C++动态链接库dll,并打在jar包内 --JNA-JNI(一) Java使 ...

  5. LabVIEW调用DLL动态链接库

    LabVIEW调用DLL动态链接库 有些数据运算比如多个数组之间的处理.雨流计数法.卡尔曼滤波使用labview这样的图形编程语言实在过于麻烦,实现不难但有一定的逻辑复杂度,倒不如用C++或者matl ...

  6. LabVIEW系列——LabVIEW下调用DLL动态链接库

    LabVIEW下调用DLL动态链接库 目录 一.需求场景 二.所需文件 三.调用步骤 注意 需求场景: 使用其他没有提供LabVIEW接口vi库,但是提供了DLL动态链接库文件的板卡. 调用其他应用程 ...

  7. JAVA通过JNI调用C++动态链接库CLL(二)

    简介 使用Visual Studio 2017新建c++动态链接库dll项目 编写JniDemo.h中getName实现并生成DLL 编写JniDemo.h在JniDemo.c实现getName方法 ...

  8. JAVA通过JNI调用C++动态链接库CLL(一)

    简介 使用eclipse新建JAVA项目并生成.h头文件 新建项目JniDemo 新建测试类JniTest并声明一个native的方法 使用Javah命令生成native方法的声明的C/C++头文件 ...

  9. C语言调用C++动态链接库

    C调用C++接口,这个问题的解决和C++调用C动态链接库是类似的.话不多说,直接上例子来进行说明. helloworld_cpp.h文件 #include<iostream> using ...

最新文章

  1. 使用Redisson优雅关闭订单
  2. 我一个普通程序员,光靠GitHub打赏就年入70万,要不你也试试
  3. jQueryt过滤选择器
  4. poj 1860 拓扑。。
  5. UA OPTI570 量子力学8 每一个左矢都有与之对应的右矢吗?
  6. 通过enum实现枚举类
  7. c++中堆、栈内存分配概念示例讲解
  8. android c vector用法,c – 使用std:vector作为低级缓冲区
  9. android (三)、Activity工作原理
  10. 【UVA1339】古老的密码(巧妙思路+(q)sort降序排列的三种方法)
  11. 2022美国大学生数学建模竞赛(美赛)思路代码
  12. linux系统日志设置
  13. 等额本金等额本息推导
  14. SpringBoot实现QQ邮箱注册和登录
  15. 数据驱动业务,说的好听,做好很难!得这样才行
  16. Docker、Docker file、Docker-compose 详解
  17. mysql 1032错误_如何快速解决MySQL 1032 主从错误
  18. URL中“#” “?” “”号的作用
  19. 监督学习(supervised learning)与非监督学习(unsupervised learning)
  20. 四轴自适应控制算法的一些尝试开源我的山猫飞控和梯度在线辨识自适应等算法—(转)...

热门文章

  1. 科研双十一,带你系统学习药物设计,快来看吧
  2. 数据库,Serverless生态最后一块拼图
  3. python 因子分析
  4. 使用python代码查询12306火车票官网余票
  5. 移动芯片主要架构技术特性及产业化应用分析
  6. LOL2月26服务器维护,LOL2月26日维护到几点_lol2月26日停机更新公告
  7. wps里的茶色字体怎么设置_《excel颜色筛选》 WPS2019的EXCEL整行填充一种颜色保存后关闭再打开就变成两种深浅不同的颜色是怎么回事呢?请大神帮忙解决...
  8. PHP 关于数组的6个处理
  9. java-php-python-ssm社交物联网的服务搜索系统计算机毕业设计
  10. JS排序算法之堆排序