看标题别以为我是抄书,如<精通Matlab与c/c++混合编程设计 第二版>一书,毕竟网上已经一堆了,我实在不好意思做网页的搬运工,当然解决过程还是有的,在文章尾部。

    环境是matlab7和vc++6,老土是老土点了,能用就行。上文提到的书本作者,你出来,我保证不打你:P134结尾部分,提到"在Output file name 文本框中更改输出文件的扩展名,如果是32位系统则改为mexw32..."。我诚实的跟着你做失败了。如果搜索到本文的读者按此书依样画葫芦失败了,不妨换个思路,不要盲目的在网上找帖子,因为其他的环境未必适合你,而且我也不能拍胸脯保证我的能过。

    首先,不得不承认,matlab有强大的文档,也不得不承认我们很懒,懒到不相信文档。当然可以说不会找。我展示下我怎么搜索到这个环境的搭建的。

    没猜错,大家都是从编写简单的mexFunction开始的,这之前,会运行mex -setup来搭建编译环境,然后在熟悉的vs环境下开发,最后在matlab命令框中用mex xxx.c的方式编译mex源文件。不知道大家有没有注意,如果代码有语法问题,matlab的出错提示和vs的出错提示相像,如果回过头看看介绍手头介绍c与matlab混合编程的书,上面会说mex编译时用的就是setup时选择的编译器。先搜搜文档上关于mex -setup的内容,结果如下:

vc++6.0调试mex文件_vc++

该页面的最下方有个连接跳转到帮助文档中所有关于mex文件注意事项的入口处,其中提到了在windows下编译mex的方法:

vc++6.0调试mex文件_matlab_02

点击进入,开始是关于命令行工具搭建编译环境,拖到最下面是IDE工具的搭建:

vc++6.0调试mex文件_vc++_03

上面的步骤描述的很清楚,其中没有要求修改输出文件名为.mexw32...

文档上虽然描述了编译的过程,但是没有提到怎么运行,我尝试了几次,把调用mex输出文件放在本文最后。

参考这个文档总结出整个过程如下:

1.创建工程名为sums的空dll工程,源码如下

#include "mex.h"
#include "matrix.h"

void mexFunction(int outArgc,mxArray* outArgv[],int inArgc,mxArray* inArgv[])
{
mexPrintf("sums\n");
}



2.设置链接库和头文件 预定义宏

2.1)头文件路径和预定义宏

vc++6.0调试mex文件_matlab_04

2.2)链接库及路径:

vc++6.0调试mex文件_#include_05

3.创建并添加def文件

LIBRARY sums.dll
EXPORTS mexFunction

动态库的名字是sums.dll因此library名为sums.dll,mex文件的调用入口函数是mexFunction。因此要导出这个函数。

4.设置mex文件的调试工具,这个倒可以参考文章开头提到的书

vc++6.0调试mex文件_#include_06

6.设置断点,vc++6中F5调试运行,之后会跳出matlab。如何才能进入mexFunction函数?先在matlab命令行中切换到dll文件所在路径,然后输入vc++dll的名字作为matlab的函数名,我的输出是sums.dll,因此这个函数名是sums

vc++6.0调试mex文件_matlab_07

至此,已经可以调试mex文件了