最近项目里需要做一个小的界面软件,在软件中需要嵌入以前写过的处理算法,可惜!当时写的时候是用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 测试代码
- 新建C++ console项目, 将*.h *.cpp从codegen拷贝到项目下, 并分别添加头文件和源文件;
- 不使用预编译头
- 添加头文件exportfun.h 和源文件 exportfun.cpp
声明外部函数
- 替换h文件,不知道什么,matlab生成的这个文件没法用
-
这样在main.cpp 可以直接调用函数
成功运行
Step 3: 生成dll文件
- 添加dll项目
- 将*.h *.cpp从C++ console项目拷贝到dll项目下, 并分别添加头文件和源文件
- 定义导出函数
- 配置
- 生成项目,即可在Csharp debug目录下生成dll文件
Step 4: 在CSharp WPF项目中使用dll文件
- 更改dll输出路径,将dll文件输出到WPF项目中
- 在main函数中使用DllImport引用dll, 并引用dllImport所在的命名空间
- 在main函数中在clickbutton 回调函数中返回程序运行结果
成功~~~~~ 撒花完结 ★,°:.☆( ̄▽ ̄)/$:.°★
看完整代码戳这里:https://github.com/fx4722/MaxMatrix
竟然是顺着腾讯课堂找来的,,,,用simlulink的时候经常出现跑不动,过零点的问题,脑壳非常疼,楼主对此有木有什么建议?