Have fun with sci.dog

将Matlab算法封装成dll后在c#里复用

最近项目里需要做一个小的界面软件,在软件中需要嵌入以前写过的处理算法,可惜!当时写的时候是用matlab写的,没办法直接在c#里进行调用,但是,实在不想再把这并不算简单的算法再用c语言写一遍。如果你也有同样的需求,请继续阅读下去,?

这里详细介绍下怎么把matlab里好的算法,转为dll文件,在开发C++项目或者制作C#界面时,可以直接使用这些已有的算法进行二次开发,而无须在将代码再用C语言重写。

举个简单的小例子?,求取矩阵的最大值,用这个简单的matlab代码来实现整个流程,详细代码,po在底部的github链接上。

Step 1:matlab Coder

用matlab Coder将需要导出的*.m文件转为C++代码,这一步需要注意的是,有些函数在matlab coder里并不直接支持转换成c代码,这时你可能就需要修改自己的程序了。

温馨提示:我们当时碰到的问题是matlab coder对cell的支持非常不友好了。?

Step 2: C++ console 测试代码

  1. 新建C++ console项目, 将*.h *.cpp从codegen拷贝到项目下, 并分别添加头文件和源文件;

Picture1

  1. 不使用预编译头
    Picture2.png
  2. 添加头文件exportfun.h 和源文件 exportfun.cpp

Picture3.png

声明外部函数
Picture4.png

  1. 替换h文件,不知道什么,matlab生成的这个文件没法用

  2. 这样在main.cpp 可以直接调用函数
    Picture5.png

成功运行

Step 3: 生成dll文件

  1. 添加dll项目
  2. 将*.h *.cpp从C++ console项目拷贝到dll项目下, 并分别添加头文件和源文件
  3. 定义导出函数
    Picture6.png
  4. 配置
    Picture7Picture9Picture8
  5. 生成项目,即可在Csharp debug目录下生成dll文件

Step 4: 在CSharp WPF项目中使用dll文件

  1. 更改dll输出路径,将dll文件输出到WPF项目中
  2. 在main函数中使用DllImport引用dll, 并引用dllImport所在的命名空间
  3. 在main函数中在clickbutton 回调函数中返回程序运行结果

Picture11

成功~~~~~ 撒花完结  ★,°:.☆( ̄▽ ̄)/$:.°★

看完整代码戳这里:https://github.com/fx4722/MaxMatrix

 

赞(0)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《将Matlab算法封装成dll后在c#里复用》
文章链接:https://www.sci.dog/?p=57
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 1

  1. #1

    竟然是顺着腾讯课堂找来的,,,,用simlulink的时候经常出现跑不动,过零点的问题,脑壳非常疼,楼主对此有木有什么建议?

    ghr5年前 (2020-02-08)回复