matlab与c#混编实例【实测成功】——c#调用matlab的自编的加法函数


仅作为操作记录共享,大佬请跳过。

背景
博主第一次使用matlab与c#混合编程,经多方查阅和尝试,最终成功用c#调用博主使用matlab自编的一个简单函数sumfunc;

过程

0、 配置matlab编译器

第一步传送门
博主在完成matlab与c#混编第一步后,开始进行生成matlab的dll动态链接库和c#编程。

1、主要参考文献

博主使用一篇论文的两段具体操作阐述传送门一和传送门二的内容,生成dll:
感谢众多大佬博主的优秀文章:
传送门一——visual studioC#调用MATLAB生成的DLL
传送门二——C# Matlab 相互调用

在这里插入图片描述

2、生成matlab的dll动态链接库

① 在matlab中,博主自己写了一个简单的加法函数,如下:

function y = sumfunc(x1,x2)

y=x1+x2;

end 

在这里插入图片描述
② 在matlab的命令窗口输入指令:

setenv('MW_MINGW64_LOC','D:\TDM-GCC-64'),

在这里插入图片描述
③ 再输入指令:

mex -setup

在这里插入图片描述
在这里插入图片描述
④ 再输入指令

deploytool

在这里插入图片描述
⑤ 然后会弹出一个对话框,选择Library Compiler

在这里插入图片描述

⑥ 然后会跳转到如下对话框:
在这里插入图片描述
⑦ 进行设置
在这里插入图片描述
⑧ 在博主设置的(上图中的)保存路径下面,就出现了打包的文件sumfunc文件夹【有用】sumfunc.prj【没用】
在这里插入图片描述
在这里插入图片描述
点开sumfunc文件夹【有用】后:
在这里插入图片描述
在这里插入图片描述
⑨ 一共只需用到两个dll:
一个是上图的sumfunc.dll,另一个是matlab安装路径下的MWArray.dll(传送门)

D:\matlab2019a\toolbox\dotnetbuilder\bin\win64\v4.0
在这里插入图片描述

至此,第二步动态链接库生成成功。

3、visual studio 新建项目和引用

① 新建c#控制台应用.Net Framework

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
② 添加两个dll的引用
在这里插入图片描述
在这里插入图片描述

③ 在Program.cs文件的代码部分添加三行代码:

using MathWorks.MATLAB.NET.Utility;
using MathWorks.MATLAB.NET.Arrays;
using sumfunc;

在这里插入图片描述

至此,visual studio 的c#项目配置成功

4、写c#代码

			sumfunc.Class1 sum = new sumfunc.Class1();
            MWArray[] argsout = new MWArray[1];
            MWArray[] argsin = new MWArray[] { 2,3 };

            sum.sumfunc(1, ref argsout, argsin);  //     对于Class类型使用 ref,是为了保持引用的地址是一致的。

            MWNumericArray mw = argsout[0] as MWNumericArray;
            double[,] res = (double[,])mw.ToArray();
            string str = res[0, 0].ToString("F2");
            Console.WriteLine(res);
            Console.WriteLine(str);
            Console.ReadKey();

在这里插入图片描述
优秀博主的代码讲解:
在这里插入图片描述

5、解决bug

博主运行后发现出现错误未经处理的异常: System.TypeInitializationException,之后博主查找优秀博主文章的解决方案,即将Any CPU 改为x86,总结在博主的另一篇博文中,传送门

6、运行效果

然后,博主的visual studio 2019平台的c#控制台就可以通过matlab生成的dll调用matlab函数了

在这里插入图片描述


博主也将代码和dll文件放在了资源库里,(不建议博友下载,可以先按照博主博文上的步骤操作,再解决一下特定的bug(因为不同电脑的出现的bug可能不同),一定能够做出。)有想先预览或看直观化流程的博友可以下载博主的代码文件传送门
(包括博主写的c#和平台生成的代码文件dll和matlab自带的dll以及参考的一篇论文,限于matlab2019a和visual studio2019的博友使用,其他版本博主不确定能否直接运行)

发布了71 篇原创文章 · 获赞 9 · 访问量 6548

猜你喜欢

转载自blog.csdn.net/weixin_41529093/article/details/104472018