c# 与 Fortran 混合编程解决方案主要有两种:

1. 进程级的交互:在 Fortran 中编译为控制台程序,.Net 调用(System.Diagnostics.Process),然后使用 Process 的 StandardOutput 属性读取控制台输出内容,显示到界面上。
2. 代码级的交互:在 Fortran 中编译为动态链接库,.Net 调用此非托管 DLL 。

本文为第二种方案初级介绍,并只涉及到数值传递,以一个简单的返回相加数值作为实例。

一、打开CVF,新建 fortran dynamic link library ,命名为 testDLL.dll ,新建源文件,写入以下代码:编译生成 DLL 文件。

subroutine testDLL2(a,b,c)implicit none!dec$ attributes dllexport::testDLL2!dec$ attributes alias:"testDLL2"::testDLL2!dec$ attributes reference::c!dec$ attributes value::a,binteger a,b,ccall plus(a,b,c)end subroutine testDLL2subroutine plus(x,y,z)integer x,y,zz = x + y
end subroutine plus

其中,隐含在注释中的命令:

  !dec$ attributes dllexport::testDLL2

申明此函数可对外公开使用

   !dec$ attributes alias:"testDLL2"::testDLL2

限定子例程名为testDLL2的混合书写形式

    !dec$ attributes reference::c

使用 reference 将 c 定义为引用传递方式

        !dec$ attributes value::a,b

使用 value 将 a,b 定义为值传递方式

可以注意到的是此处调用的 plus 子例程无须有上述命令

二、在 VS 中新建 项目-类库 ,命名空间为 PlaceFortran ,写入如下代码,将编译好的 fortran DLL 文件放置 bin/debug 文件夹下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;namespace PlaceFortran
{public class ClassTest{[DllImport("testDLL.dll")]public static extern void testDLL2(int x, int y, ref int c);//c为地址传递public int testSub(int x, int y){int p;testDLL2(x, y, ref p);return p;}}
}

至此,可以在界面层调用这个函数进行相加计算

            ClassTest c = new ClassTest();int i = c.testSub(22,23);//返回相加数为45

转载于:https://www.cnblogs.com/silyvin/archive/2011/08/30/9106930.html

.Net(c#) 通过 Fortran 动态链接库,实现混合编程相关推荐

  1. matlab元胞自动机学风演化,利用MATLAB和VC60混合编程技术研究元胞自动机动态演化过程...

    利用MATLAB和VC60混合编程技术研究元胞自动机动态演化过程 第! !卷!第期 ! 成都理工大学学报! 自然科学版 !# $ % - 2: 5 34- 1 -6;!9 ? : A ? $ % $ ...

  2. FORTRAN MATLAB 混合编程

    0618bianlong@gmail.com 第一部分:Fortran调用Matlab引擎 1  什么是Matlab引擎 所谓Matlab引擎(engine),是指一组Matlab提供的接口函数,支持 ...

  3. python fortran混合编程_python fortran c 混合编程

    背景 因为编程需要使用python和fortran(或者c,c++)混合编程,所以进行了一些资料查询和实验.首先尝试了f2py,但是这个项目已经很久没有更新,为了以后兼容性考虑(后期可能会使用到c++ ...

  4. Fortran和C/C++混合编程学习笔记(一):编译链接

    有时候,我们希望使用Fortran和C/C++混合编程,以利用各语言的优势.只要确保函数调用时传递的参数类型正确,定义和声明的变量类型和大小匹配,Fortran和C 语言二者的函数和全局变量就可以彼此 ...

  5. c 使用matlab引擎,[转载]C与MATLAB混合编程之调用MATLAB引擎

    Visual Studio调用MATLAB需要的配置已经在<Visual Studio调用MATLAB的配置>一文中给出了详细的步骤,本文将介绍混合编程的示例. 在C中调用MATLAB,据 ...

  6. c 与matlab混编,C与MATLAB混合编程之调用MATLAB引擎

    Visual Studio调用MATLAB需要的配置已经在<Visual Studio调用MATLAB的配置>一文中给出了详细的步骤,本文将介绍混合编程的示例. 在C中调用MATLAB,据 ...

  7. C++ SuperLU 混合编程

    1. 软件版本信息 Windows 10 Visual Studio 2015 Professional SuperLU Package 2.  软件下载链接 SuperLU Introduction ...

  8. QT与MATLAB混合编程

    QT与MATLAB混合编程 本文就介绍使用 Qt 和 Matlab 进行混合编程的基本流程,主要包括: 如何在Matlab中将m文件编译为C++语言的DLL文件 如何在Qt项目中加入自定义DLL相关的 ...

  9. matlab2014a + win764bit + vs2013混合编程(.m转成dll供C++调用)

    在matlab中可以通过mbuild工具将.m文件编译成dll文件供外部的C++程序调用,这样就可以实现matlab和C++混合编程的目的. 1. 使用matlab生成dll文件 1.1 首先需要带有 ...

最新文章

  1. “Jupyter的杀手”:Netflix发布新开发工具Polynote
  2. 数据结构(C语言实现)第1章课后习题参考答案
  3. python 处理 json 四个函数dumps、loads、dump、load的区别
  4. marquee标签、插入百度地图
  5. 学习template算法以及改进(一)
  6. gitee如何搭建mysql_Gitee的下载安装配置及使用步骤详解
  7. 计算方法(一):误差
  8. MATLAB【工具箱下载】汇总
  9. 工作簿中工作表内容批量提取
  10. wim linux u盘启动,在U盘启动中安装CDLinux
  11. 2018Android面试题总结 上(附答案)
  12. Android 仿音乐播放器自定义锁屏歌词功能
  13. 成功解决 zsh: command not found
  14. 【新年福利】2019年值得一用的8款协作工具
  15. 如何快速转载CSDN中的博客2018年针对最新csdn
  16. 科沃斯擦玻璃机器人使用感受_科沃斯擦玻璃机器人怎么样?有人用过自动擦窗机器人吗?价格是多少...
  17. MySQL查询最大值(最小值)或前n个最大(最小)值的方法分析
  18. Fastjson 1.2.24远程代码执行漏洞(com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl)
  19. 阿里云视觉AI训练营_Class5_实践课:人脸动漫化搭建
  20. D17 LeetCode 2043.简易银行系统(中等)

热门文章

  1. 开源贡献 计算_如何克服恐惧并为开源做贡献
  2. 车联网APP,安全设施薄弱的山寨品
  3. UI设计的发展前景怎么样?
  4. 女生学软件测试有哪些优势
  5. 初学者如何学Java开发
  6. java字符串统计英文字符用什么不同_JAVA程序。输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。...
  7. 网络分流器-网络分流器IP网络路由交换测试技术探讨
  8. Android -- Fragment注意事项
  9. CentOS7安装配置redis-3.0.0
  10. caffe的python接口学习(6):用训练好的模型(caffemodel)来分类新的图片