使用Matalab封装动态链接库(dll)供.NET(C#)调用

原创 2017年12月22日 14:32:51

我有一个梦想,是改变世界,这是很多技术人员的梦想;从小事做起,踏实做人做事,当身边的人或事因为自己能向更好的方向改变或发展的时候,那就是在改变世界,至花甲之时,可能我的梦想也无法实现,但我会一直追逐着他前行。我相信蝴蝶效应。荣耀的背后刻着一道孤独。

最近和某大学实验室团队一起处理算法工作,他们提供算法,我负责接口编写,通过调用接口,接口调用算法,从而实现算法调用以及数据持久化。他们使用matlab进行算法处理,在进行算法调用时,我们通过将算法库封装为动态链接库Dll来供C#调用从而来进行接口代码实现。算法团队提供算法源代码,我通过matlab实现可供NET调用的动态库编译及调用,并实现接口编写。
下面我们进入正题,通过书写类、函数、封装为dll,控制台调用来实现整个简单效果演示。

一、书写要编译成dll的类及函数
定义一个类
新建类

定义一个函数
新建函数

构成的两个文件目录如图
新建的两个文件目录

二、可供C#调用的动态库dll生成
打开打包工具
在命令行窗口输入命令deploytool并回车,弹出图示打包选项,选择Library Compiler(动态库编译)
打包

打包配置界面弹出,如图,按照图中进行配置
图中配置步骤:
1、选择动态库类别为NET程序集
2、选择要被打包成程序集的函数或类
3、指定程序集名称、描述、摘要,版本号
4、指定程序集的命名空间、类名及函数
5、选择程序集NET版本(如图中我选择的是NET4.0)
6、点击打包(Package)按钮进行打包
配置

打包完成后,打开打包路径,即可看到打包好的可供DLL调用的动态库。
这里写图片描述

三、在NET中调用
1、安装tamlab动态库运行环境
简单原理阐述:
NET的程序要运行,需要对应或更高版本NET Framework
同理,matlab的程序也需要一个运行环境,这个运行环境是TDM-GCC(可上网搜索下载然后安装,注意根据你自身Matlab的情况使用对应的X86或X64版本)。
如何安装这里不做阐述。
2、NET中调用
新建一个控制台程序
添加相应DLL引用
(1)你编译好的程序集
(2)MWArray.dll(该Dll在你安装完运行环境后,使用Everything工具搜索即可获取)
如图,我把两个dll拷贝并添加到了项目中,同时在引用中添加了引用
动态库引用

MWArray.dll可以把它理解为一个转换器(类似我们NET中的公共类型库和公共运行语言),他能实现NET中数据类型与Matlab生成的Dll的类型的互转等。

此时,我们就可以实现动态库的使用了。如图(如图你会发现,运行首次调用动态库的函数会比较慢,你再看看内存,你会发现内存瞬间会飙升,是因为首次调用的时候,会启动TDM-GCC运行环境;所以在调用设计的时候,可以采用单例设计模式或更优的其他方式来保证算法调用的一些效率及性能问题)
调用结果

结果:函数直接可以按照我们NET中的理解来调用,但是类不可以调用(Matlab中的类被封装成了一个NET中的函数)

疑问:封装的类也会变成一个函数,并不会被编译为我们NET中理解的类(NET中的类包含函数可调用),所以从调用结果中可以看出,Test类只能被当做一个NET中的一个函数来使用,这是我的一个疑惑,是否真的是这样,就目前的实验结果来看,是这样的;有可能有方式可以实现,但是我并没有再做深入,如果小伙伴有觉得不对的地方可以指出一起讨论,欢迎评论。

注意:项目的运行平台(x86或x64要注意,如果matlab是x64的,那么要记得调用动态库的宿主或控制台尽量是x64)
我遇到过这样的情况,x64的matlab生成的动态库,WCF调用算法动态库,wcf服务寄宿在IIS上可以正常调用动态库,但是在调试环境下,直接运行wcf服务无法正常调用,但是将wcf服务寄宿在x64的控制台上即可正常调用。

综上所述,我们已经实现了Matlab封装DLL供NET调用的整个过程。

版权声明:本文为博主原创文章,未经博主允许不得转载。

C#调用matlab写的动态链接库(dll)

最近老师在做项目,有一个需求,就是他现在用matla
  • peng825223208
  • peng825223208
  • 2014年09月16日 12:50
  • 1844

C#调用matlab动态链接库

1、C#调用matlab程序方法 步骤一:在MATLAB中建一个m文件(test.m) ***注意,.m文件名随意,function函数名随意*** 该程序用于模拟生成雷克子波,并绘图,代码如下...
  • FXM720505
  • FXM720505
  • 2016年05月12日 11:29
  • 2565

VS 2013 代码封装成dll动态链接库及引用,release下

“真正的幸福并不是拥有什么,而是你对自己所拥有的东西怀抱感恩之心,你相信所有的一切都是最好的安排,便不会焦躁、愤怒、悲痛、挣扎。”  一、封装DLL库      1)新建Win 32 项目...
  • whu_Gcoder_2017
  • whu_Gcoder_2017
  • 2017年04月17日 11:47
  • 2720

从.NET平台调用Win32 API(C#调用的dll动态链接库)

原文地址:http://liutiemeng.blog.51cto.com/120361/18764/  特别通俗易懂,不得不分享一下。 作者:刘铁猛 日期:2005-12-20 关键字:C# ...
  • aliza1226
  • aliza1226
  • 2013年06月07日 16:40
  • 992

Asp.net_关于如何利用编译器把[.cs]文件生成动态链接库[.dll]文件方法的总结

[什么是动态链接库?] 动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种...
  • ls_man
  • ls_man
  • 2012年12月07日 23:14
  • 3580

PB8调用使用C++与C#分别编写生成解压缩带有密码的zip压缩文件的动态链接库dll(部分内容转自互联网)

本文章编写的原因,是由于zlib无法解压缩由ICSharpCode.SharpZipLib.dll压缩的文件对作者的项目造成了困难,于是结合网上关于这方面的资料整理了这篇文章,希望对大家有所帮助,减少...
  • kennyzjk
  • kennyzjk
  • 2015年05月16日 17:50
  • 1001

关于资源“C# 调用Matlab编译的动态链接库dll”的补充文件和说明

  • 2015年09月24日 17:49
  • 1023B
  • 下载

C# 调用Matlab编译的动态链接库dll 补充数据文件

  • 2014年05月08日 16:05
  • 9KB
  • 下载

C# 调用Matlab编译的动态链接库dll 实现了mschart画图

  • 2012年05月05日 21:46
  • 2.62MB
  • 下载

C#中如何调用动态链接库DLL

  • 2012年02月11日 06:07
  • 62KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用Matalab封装动态链接库(dll)供.NET(C#)调用
举报原因:
原因补充:

(最多只允许输入30个字)