在 Matlab 环境中可以方便的编辑 MEX 文件,而编译 MEX 文件只要一句 mex 命令,所以一般不需要 VC++ 环境来建立 MEX 文件。但对于大型的 MEX 程序,可能会比较复杂,容易出错,这时可以利用 Visual C++ 强大的调试功能。下面通过一个简单的例子说明如何在 Visual C++ 中建立及调试的步骤。
问题:在 Visual C++ 中建立 MEX 文件,功能是在 Matlab 控制窗口中输出“ Hello Matlab World ”
1. Visual C++ 中 MEX 文件的建立
(1) 建立 DLL 工程
在 Visual C++ 中创建一个 MFC DLL 工程,命名为 MexDemo ,如图 1 所示
图 1 创建 MFC DLL 工程
(2) 设置输出函数
打开 MFC DLL 工程中的 MexDemo.def 文件,需要在其中定制 DLL 文件的输出函数,在 def 文件中的EXPORTS 项中添加 mexFunction 一行,设置后, MexDemo.def 文件内容如图 2 所示:
图 2 MexDemo.def 文件内容
(3) 添加应用程序代码
在工程中新建一个 C++ 源文件,命名为 main.cpp ,将该文件添加到工程的源文件中,功能是输出一行 "Hello Matlab World!" 。如图 3 和图 4 所示:
图 3 添加 main.cpp 文件
图 4 main.cpp 文件内容
(4) 编译器设置
因为 C++ 文件中含有 Matlab 的库函数,要在 Visual C++ 中成功编译此类 MEX 文件的话要对编译器做一些必要的设置,下面以 Microsoft Visual C++ 6.0 为例做如下设置。
添加 include 路径
打开“ Project setting ”→“ C/C++ ”→“ Preprocessor ”→“ Additional include directories ”,添加Matlab 外部接口的 include 目录,本机为 "I:/Program Files/MATLAB/R2007b/extern/include" 。详细情况如图 5所示:
图 5 添加头文件目录
添加 lib 路径
打开“ Project setting ”→“ Link ”→“ Input ”→“ Additional library path ”,添加 Matlab 外部链接库的目录,本机为 "I:/Program Files/MATLAB/R2007b/extern/lib/win32/microsoft" 。详细情况如图 6 所示:
图 6 设置库文件包含目录
添加链接库
打开“ Project setting ”→“ Link ”→“ General ”→“ Object/Library modules ”,添加附加依赖项 libmx.lib、 libeng.lib 、 libmat.lib 以及 libmex.lib ,详细情况如图 7 所示:
图 7 添加附件库文件
(5) 编译
设置好 Visual C++ 的编译器后,就可以编译此工程了,编译成功后,在 debug 文件夹中会生成 MexDemo.dll 链接库文件。
(6) 运行
在 Matlab 环境下,把 debug 目录设为当前目录,然后在 Matlab 控制窗口中输入 MexDemo ,在 Matlab 控制窗口中得到结果:
Hello Matlab World!
>>