VS调用matlab生成的dll
一、 编程环境
? VS2010 professional 32位 ? Matlab2010b 32位
二、 matlab程序转dll 1. matlab程序简单实例
2. 转dll步骤
? 命令行中输入:mbuild–setup,再选择编译的环境;
? 命令行输入:mcc –W cpplib:libname–T link:libfilename.m;
? 生成多个文件,有用的文件为libname.lib、libname.c、libname.dll,切记libname.cpp
只是参考用的,不要加入到VS项目里面。
三、 VS工程建立 1、包含库及链接库设置
? ? ? ?
包含目录中添加:D:\\matlab\\extern\\include;
库目录中添加:D:\\matlab\\extern\\lib\\win32\\microsoft;
链接器-常规-附加库目录中添加:D:\\matlab\\extern\\lib\\win32\\microsoft; 链接器-输入-附加依赖项添加
libmyadd.lib;mclmcr.lib;libeng.lib;libmat.lib;libmex.lib;libmx.lib;mclmcrrt.lib;切记,一定要把libmyadd.lib加入;
2、调用matlab的dll程序实例
四、 总结
1、 刚开始用自己的笔记本(环境是win7 64位),matlab生成dll后在VS2010中调
用,编译一直提示连接错误,主要是很多内部函数(尾部添加_proxy)链接失败,可能是VS项目设置的WIN32原因,而且matlab/extern/lib里面win32的lib没有mclmcrrt.lib文件,所以给VS更新X64功能,后来没成功,转到单位的32机器上面。
2、 在win7 32位机器上面直接编译成功,但是运行会报错,我调试后发现运行到
matlab的dll核心程序
if (mclcppFeval(inst, name, nargout, (void**)&lhs, (void*)((array_buffer*)rhs)) == MCLCPP_ERR) mwException::raise_error();
时报错,通过几个小时的分析,认为没有把libmyadd.lib加入到附加依赖项中,但是加上后会提示发现重定义字符,预算把libmyadd.cpp移除,再编译后成功运行。