MSVS C# Matlab的混合编程系列2 - 构建一个复杂(含多个M文件)的动态库:

发布时间:2024年01月18日

 前言:

本节我们尝试将一个有很多函数和文件的Matlab算法文件集成到C#的项目里面。

本文缩语:

MT = Matlab


问题提出:


1 我们有一个比较复杂的Matlab文件:

 这个MATLAB的算法,写了很多的算法函数在其他的M文件里面,这样,前面博客的方法就不够用了。会报错:

解决办法如下: 


写在前面的结论:

1 你要用一个外壳函数,封装你的最上层的M文件

2 去掉不必要的M文件间的耦合,把M文件的参数都写到 外壳函数上


 步骤:

1 编译:

1.1 常规操作: 多入口报错

 【报错】只能接受具有单个入口函数的 MATLAB 函数和 MEX 文件作为导出函数。未添加以下文件因为它们不是可接受的文件类型,或者包含在 MATLAB 根目录下: 

MT ,显然不支持多个入口函数的Matlab的源码:

【解决办法,封装成一个大函数】用一个function包起来就好了

function ballfitting(fname)
% Your code here
end

这里笔者,

1.1.1 还没有MT的输出参数的传递。

在MT命令行窗口调用deploytool

对C#的输出,MT里面我们选取如下: 

 1 using the Matlab .NET Assembly

 上图中,是没有MATLAB的输出参数的情况:但是,已经自动,把所有的MT相关的原文件都加了。

1.1.2 有MT的输出参数的传递的外壳函数封装。
function [centers,angle_degree] = findid_v1(filename)

... // your code

end

上面,

笔者给MT的外壳函数加了2个输出的的变量,和一个输入变量。

注意:外壳函数的现在的名称,findid_v1似乎没啥用,即使在C#调用,也没有用到。

然后,我们调用在MT中,命令行调用,deploytool,和前面一样。

 上图,自动,把所有的MT相关的原文件都加了的同时,大家应该注意到,

类MTFindid,多了两个输入的参数。

1.2 注意库的版本,最好每次更新M的原文件的时候,选择更新一下版本号

文章来源:https://blog.csdn.net/yellow_hill/article/details/135672782
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。