本贴目的: 64位编译,VS2015调用Matlab2016编译生成的DLL,搞定:各种运行错误,调试错误。
转载说明:
本贴内容仅仅用于软件代码的研究和学习,相关的转载和应用不得损害Microsoft和Mathworks公司的商业利益。
有条件的情况下,请稍微支持一下老美的正版软件,例如高校有经费买套正版或者买个学习版的,中国的开发者还是要参与到老外的开发体系中。如果版权所有者认定本贴已经发生侵权,请及时告知nanohujin@139.com。
各位老炮:对于比较有价值的题目还是要继续发帖和回帖,帮扶新人。只看贴不回不发,论坛的魔力就没了,各位年轻时候也是泡着坛子过来的。。。
本贴背景:
32位编译下,VC++(Visualstudio)调用Matlab编译生成的DLL本来是一件很容易的事情,现在转到64位了,编译环境设置不当,程序无法调通。另外,参照别人的帖子copy代码,不仔细思考,容易出现各种运行报错。
不想折腾的话,可以先用32位编译过渡一下:VS安装2010之前的版本,选用(x86) 32位编译,Matlab安装2011之前的版本,那个是支持32位编译的。这个路是通的,但是太保守,错过了新软件(个人认为VS2015的界面,好用而美腻)和新资源(OpenCV是个好东西,不安装最新的VS支持不了)。另外,OpenCV高版本只(直接)支持64位编译,所以还是要继续前进。。。
看到很多帖子有“杂交”的想法:安装高版本VS和低版本的Matlab。VS采用64位编译,编写主程序;VS采用32位编译,编写辅助程序调用Matlab 32位DLL。主程序和辅助程序采用进程间通信,例如:COM服务器,共享内存地址,发送消息。。。这个真的是很辛苦。其中,低版本的Matlab,mbuild选择高版本VS的编译器,也是比较麻烦,这里不展开。
另外,VC调用Matlab C++ Math Library也是一种混合编程的解决方案,我个人不推荐。理由:有些m文件不支持C文件编译输出。功能打包和调用编程没有DLL简便。
本贴内容:
[1]================扫清外围问题
VS和Matlab版本兼容的问题。Matlab的编译器只支持最近的VS版本,这个用mbuild –setup测试就知道了,一般建议Matlab版本稍高。本人建议:VS2015和Matlab2016,本人电脑win7 64。
首先,Matlab本身安装必须正点,安装后无需特别设置,直接mcc 编译一个图形显示+运算的exe运行OK。所以某论坛的破2017版本不建议安装。
其次,某些同志程序调不通,就各种VS和Matlab版本安装和卸载,这个没有必要。要相信老美大公司的产品。关键是,最终也没调通。
[2]=========== ====实例和过程
以下步骤描述简单,但是保证完整。
M文件定义。
function c =Test(a,b)
c = a+b;
--------------------------------------
Matlab命令生成库文件和头文件
mcc -W cpplib:TestMat64 -T link:lib Test
获得所需文件,拷贝到VS工程相应目录下。
电脑中添加Matlab运行环境: [ 注意:电脑重启生效!!!]