Matlab2012生成DLL文件与VS2005(VC)混合编程解决方法(折腾两天的成果)

来源:互联网 发布:数据库工程师考试书籍 编辑:程序博客网 时间:2024/04/29 20:32

Matlab2012生成DLL文件与VS2005(VC)混合编程解决方法(折腾两天的成果)

Matlab的版本太多,使用起来很麻烦,我使用过maltab2010b.2007b.都没有成功,最后装了matlab2012才成功,不知道是不是我操作的问题。本人没有使用过matlab.以下是实现的过程。

参考http://forum.simwe.com/thread-801187-1-1.html

先建立一个简单的m文件:

functionmcctest01

 

x=0:0.01:20;

y = x.*sin(x);

 

plot(x,y);

xlabel('x');

ylabel('y');

需要注意文件名,在vc中需要调用。

下一步,在MATLAB中进行编译设置,键入"mex -setup,选择VC2005

继续输入"mbuild -setup",和上面一样仍然选择VC2005。两步选择一样。

下一步,将m文件转换为可被VC调用的dll文件。在matlab中输入命令:

mcc -t -h -L C -W lib:libmcctest01 -T link:lib mcctest01.m

MATLAB会提示 -t -h -L这三个参数已经不再使用了,不管它,工作目录中会生成一堆文件,其中的libmcctest01.hlibmcctest01.liblibmcctest01.dll三个文件是我们所需要的。

下一步,在VC2005中添加配合MATLAB编程的lib目录和include目录。

" \Tools \ Options \ Projects and Solutions \ VC++ Directories"中,在 " Include files " " Library files "中分别添加下列目录(默认安装位置):

" F:\Program Files\MATLAB\R2012a\extern\include "

"F:\Program Files\MATLAB\R2012a\extern\lib\win32\microsoft "

下一步,使用VC2005新建基于对话框的工程(mfcmcctest01),在 " \Project \ Properties \ Configuration Properties \ Linker \ Input " 中添加mclmcrrt.liblibmcctest01.lib。将上述三个文件拷贝到VC工程所在目录,在Project菜单中Add Existing Itemmccmfc01.h添加到工程中。

下一步,编程。在恰当的位置添加 #include mccmfc01.h"。在mccmfc01.h中可以看到上面m文件中那个函数的C语言声明:

externLIB_libmcctest01_C_API

boolMW_CALL_CONVmlxMcctest01(intnlhs, mxArray *plhs[], intnrhs, mxArray *prhs[]);

mccmfc01Dlg.cpp文件的OnInitDialog()加入MCR初始化函数mclInitializeApplication(NULL, 0)、与静态库初始化函数libmcctest01Initialize()

BOOLCmccmfc01Dlg::OnInitDialog()

{

// TODO: Add extra initialization here

      if (!mclInitializeApplication(NULL, 0))

      {

             AfxMessageBox(_T("Cloudnot...."));

      }

      libmcctest01Initialize();  // 初始化

      returnTRUE;  // return TRUE  unless you set the focus to a control

}

在按键响应函数OnBnClickedButton1()添加m文件中定义的函数mlfMcctest01();,注意是mlfMcctest01(),而不是mcctest01()。这个地方让我吃了很多哑巴亏,浪费了很多时间。

voidCmccmfc01Dlg::OnBnClickedButton1()

{

      // TODO: Add your control notification handler code here

      mlfMcctest01();

}

编译完,运行即可。

原创粉丝点击