Matlab和C混合编程的一个靠谱思路

Matlab和C混合编程的一个靠谱思路

写在前面的话

(1)如无特殊需要(如速度),尽量不要做A语言和B语言互相转化这样的事情。
(2)如无特殊需要(如封装),尽量不要做A、B两种语言互相调用代码库的事情,真的容易出错,尤其是数据交换。

前一段时间在一个项目中需要实现matlab和C的混合编程,着实费了很大的功夫,虽然需求满足了,但其实效果很一般,混合编程是有资源浪费的代价的,影响整个程序的性能,但由于项目的特殊性,demo程序需要提交给合作单位,所以需要dll的封装,因此混合编程也是无奈之举。所以建议大家:

但在无数次头疼的查找资料中,偶尔发现了一个大神建议的一种方法很靠谱,不需要复杂的接口操作,只需要一个中间文件进行输入输出导向就可以实现两种代码的协同工作,通过邮件交流,我也大概有了清晰的思路,今天写出来分享给大家,希望对大家有所启发。

本方法有适用范围,你的混合编程目的需要满足

(1)你只需要程序抛出结果,而不需要将它们本身提交或展示给另外的人。
(2)你的matlab程序太慢,你需要速度上的优化,但又不需要将所有的matlab变成C,同时满足(1)
(3)你手上有两种程序的模块,你确实不像改变任何一种,但又想让他们协同工作,同时满足(1)

如果你写程序的目的满足上述条件的话,请继续往下看,否则建议你还是参考我之前的两篇文章:

windows 32/64位系统 VS2010调用MATLAB2012生成的dll方法
windows 32/64位系统 MATLAB使用MEX方式调用C/C++源码

正式开始

首先假设你手上有A、B两块程序,它们是不同的语言写的,但可以协调处理同一个问题或数据。这里我们先认为这两段程序是承接关系,也就是A处理完了,B继续处理就可以。那么我可以这么来做:

1. 建立一个文件夹temp,专门用来存放中间文件。

2. A、B两个程序同时运行,且程序中都有能检测文件的代码(这个绝大部分的语言都可以做到)

3. A处理完数据后,向temp文件夹中写一个临时文件A.txt(如果需要较为简单的数据传输也可以直接写在A中)。

4. B程序检测到A.txt后,按需读取内容,同时继续做处理,做完处理后删除A.txt,同时生成B.txt。

5. A程序检测到B.txt后,按需读取内容,做处理,做完后删除B.txt,再次生成A.txt。

简单的程序可能到第4或第5步就结束了,但是复杂的程序可能要重复4、5两个步骤多次。

这个方法杜绝了A、B两种语言的代码交织,能够最大限度地保留两种语言的功能,当然你需要做的可能是在两段代码中都添加检测文件和输入输出的代码,但这个实现起来就要简单很多了。

如有任何问题请留言或发送email到:[email protected]

你可能感兴趣的:(C++/MATLAB混合编程)