.Net(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 动态链接库,实现混合编程相关推荐
- matlab元胞自动机学风演化,利用MATLAB和VC60混合编程技术研究元胞自动机动态演化过程...
利用MATLAB和VC60混合编程技术研究元胞自动机动态演化过程 第! !卷!第期 ! 成都理工大学学报! 自然科学版 !# $ % - 2: 5 34- 1 -6;!9 ? : A ? $ % $ ...
- FORTRAN MATLAB 混合编程
0618bianlong@gmail.com 第一部分:Fortran调用Matlab引擎 1 什么是Matlab引擎 所谓Matlab引擎(engine),是指一组Matlab提供的接口函数,支持 ...
- python fortran混合编程_python fortran c 混合编程
背景 因为编程需要使用python和fortran(或者c,c++)混合编程,所以进行了一些资料查询和实验.首先尝试了f2py,但是这个项目已经很久没有更新,为了以后兼容性考虑(后期可能会使用到c++ ...
- Fortran和C/C++混合编程学习笔记(一):编译链接
有时候,我们希望使用Fortran和C/C++混合编程,以利用各语言的优势.只要确保函数调用时传递的参数类型正确,定义和声明的变量类型和大小匹配,Fortran和C 语言二者的函数和全局变量就可以彼此 ...
- c 使用matlab引擎,[转载]C与MATLAB混合编程之调用MATLAB引擎
Visual Studio调用MATLAB需要的配置已经在<Visual Studio调用MATLAB的配置>一文中给出了详细的步骤,本文将介绍混合编程的示例. 在C中调用MATLAB,据 ...
- c 与matlab混编,C与MATLAB混合编程之调用MATLAB引擎
Visual Studio调用MATLAB需要的配置已经在<Visual Studio调用MATLAB的配置>一文中给出了详细的步骤,本文将介绍混合编程的示例. 在C中调用MATLAB,据 ...
- C++ SuperLU 混合编程
1. 软件版本信息 Windows 10 Visual Studio 2015 Professional SuperLU Package 2. 软件下载链接 SuperLU Introduction ...
- QT与MATLAB混合编程
QT与MATLAB混合编程 本文就介绍使用 Qt 和 Matlab 进行混合编程的基本流程,主要包括: 如何在Matlab中将m文件编译为C++语言的DLL文件 如何在Qt项目中加入自定义DLL相关的 ...
- matlab2014a + win764bit + vs2013混合编程(.m转成dll供C++调用)
在matlab中可以通过mbuild工具将.m文件编译成dll文件供外部的C++程序调用,这样就可以实现matlab和C++混合编程的目的. 1. 使用matlab生成dll文件 1.1 首先需要带有 ...
最新文章
- “Jupyter的杀手”:Netflix发布新开发工具Polynote
- 数据结构(C语言实现)第1章课后习题参考答案
- python 处理 json 四个函数dumps、loads、dump、load的区别
- marquee标签、插入百度地图
- 学习template算法以及改进(一)
- gitee如何搭建mysql_Gitee的下载安装配置及使用步骤详解
- 计算方法(一):误差
- MATLAB【工具箱下载】汇总
- 工作簿中工作表内容批量提取
- wim linux u盘启动,在U盘启动中安装CDLinux
- 2018Android面试题总结 上(附答案)
- Android 仿音乐播放器自定义锁屏歌词功能
- 成功解决 zsh: command not found
- 【新年福利】2019年值得一用的8款协作工具
- 如何快速转载CSDN中的博客2018年针对最新csdn
- 科沃斯擦玻璃机器人使用感受_科沃斯擦玻璃机器人怎么样?有人用过自动擦窗机器人吗?价格是多少...
- MySQL查询最大值(最小值)或前n个最大(最小)值的方法分析
- Fastjson 1.2.24远程代码执行漏洞(com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl)
- 阿里云视觉AI训练营_Class5_实践课:人脸动漫化搭建
- D17 LeetCode 2043.简易银行系统(中等)
热门文章
- 开源贡献 计算_如何克服恐惧并为开源做贡献
- 车联网APP,安全设施薄弱的山寨品
- UI设计的发展前景怎么样?
- 女生学软件测试有哪些优势
- 初学者如何学Java开发
- java字符串统计英文字符用什么不同_JAVA程序。输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。...
- 网络分流器-网络分流器IP网络路由交换测试技术探讨
- Android -- Fragment注意事项
- CentOS7安装配置redis-3.0.0
- caffe的python接口学习(6):用训练好的模型(caffemodel)来分类新的图片