vs2012和Matlab R2014a混合
来源:互联网 发布:gta5娇羞萌妹捏脸数据 编辑:程序博客网 时间:2024/06/10 11:05
思路:为了实现C++与Matlab混合编程,采用由m文件构造动态链接库然后在visual studio中调用的方法。
系统:Windows 7旗舰版(64位),VS2012旗舰版,Matlab R2014a
1、Matlab中dll文件创建
1.1 m文件编写
function [y,z] = myadd2(a, b)% dummy function, just to demonstrate the ideay = a+b;z = a+2*b;end
1.2 设置编译器
>>mbuild -setup
MBUILD 配置为使用 'Microsoft Visual C++ 2012 (C)' 以进行 C 语言编译。
要选择不同的 C 编译器,请从以下选项中选择一种命令:
Microsoft Visual C++ 2012 (C) mex -setup:C:\Users\jdc\AppData\Roaming\MathWorks\MATLAB\R2014a\MBUILD_C_win64.xml C -client MBUILD
Microsoft Visual C++ 2010 (C) mex -setup:D:\MATLAB\R2014a\bin\win64\mexopts\msvc2010.xml C -client MBUILD
要选择不同的语言,请从以下选项中选择一种命令:
mex -setup C++ -client MBUILD
mex -setup FORTRAN -client MBUILD
这里我选择的是: mex -setup C++ -client MBUILD
要选择不同的 C++ 编译器,请从以下选项中选择一种命令:
Microsoft Visual C++ 2012 mex -setup:C:\Users\jdc\AppData\Roaming\MathWorks\MATLAB\R2014a\MBUILD_C++_win64.xml C++ -client MBUILD
Microsoft Visual C++ 2010 mex -setup:D:\MATLAB\R2014a\bin\win64\mexopts\msvcpp2010.xml C++ -client MBUILD
选择:Microsoft Visual C++ 2012
1.3 DLL的生成
在MATLAB命令框中输入以下命令:(确保)
mcc -W cpplib:libmyadd2 -T link:lib myadd2.m
生成libmyadd2.lib, libmyadd2.h, libmyadd2.dll 等文件,将这三个文件拷到VS的项目目录下
2、VS2012调用DLL
2.1 新建vs项目,并设置环境
新建一个win32 控制台应用程序,我取名matlabMyaddtest.。接下来进行配置,在该项目的属性中进行了配置,只对该项目有效。若建新的项目需要重新配置。
项目建好后将libmyadd2.lib, libmyadd2.h, libmyadd2.dll三个文件拷贝到项目目录下。
首先配置项目属性页/配置属性/VC++目录,根据自己电脑上软件的安装位置对照设置,如下图所示:
其次配置项目属性页/配置属性/链接器/输入/附加依赖项,填入libmyadd2.lib mclmcrrt.lib mclmcr.lib(三个之间回车),如下图所示:
注意:与自己电脑系统相对应的bin路径还需要加入到系统环境变量中,我的电脑是D:\MATLAB\R2014a\bin\win64,如下图所示:
配置工作到此结束。
2.2编写主程序,调试运行
#include <iostream>#include "mclmcr.h"#include "mclcppclass.h"#include "libmyadd2.h"int main(int argc, char* argv[]){ std::cout << "Hello world!" << std::endl; /* Initialize the MCR */ /* if( !mclInitializeApplication(NULL,0) ) { std::cout << "Could not initialize the application!" << std::endl; return -1; } */ // initialize lib(必须) if( !libmyadd2Initialize()) { std::cout << "Could not initialize libmyadd2!" << std::endl; return -1; } try { // declare and initialize a mwArray a(2, 2, mxDOUBLE_CLASS); double *aData; aData = new double[4]; int i; for( i=0; i<4; ++i) { aData[i] = 1.0*i; } // print output std::cout << "a = " << std::endl; std::cout << aData[0] << ", " << aData[1] << std::endl; std::cout << aData[2] << ", " << aData[3] << std::endl; a.SetData(aData, 4); // declare and initialize b mwArray b(2, 2, mxDOUBLE_CLASS); b(1,1) = 11.; b(1,2) = 12.; b(2,1) = 21.; b(2,2) = 22.; mwArray y(2, 2, mxDOUBLE_CLASS);//mxDOUBLE_CLASS表示变量的精度 mwArray z(2, 2, mxDOUBLE_CLASS); // call the function myadd2(2, y, z, a, b); // copy data from mwArray to C++ objects // allocate outputs double *yData, *zData; yData = new double[4]; if( yData == NULL ) { std::cout << "Failed to allocate memory for yData!" << std::endl; return -1; } zData = new double[4]; if( zData == NULL ) { std::cout << "Failed to allocate memory for zData!" << std::endl; return -1; } // copy data from mwArray to C++ y.GetData(yData, 4); z.GetData(zData, 4); // print output std::cout << "y = " << std::endl; std::cout << yData[0] << ", " << yData[1] << std::endl; std::cout << yData[2] << ", " << yData[3] << std::endl; std::cout << "z = " << std::endl; std::cout << zData[0] << ", " << zData[1] << std::endl; std::cout << zData[2] << ", " << zData[3] << std::endl; // deallocate memory delete [] aData; delete [] zData; delete [] yData; } catch( const mwException& e) { std::cerr << e.what() << std::endl; } // terminate the lib libmyadd2Terminate(); // terminate MCR mclTerminateApplication(); return 0;}
程序运行结果如下:
参考:http://blog.csdn.net/pipiqiqi123/article/details/7709683
- vs2012和Matlab R2014a混合
- VS2012和matlab 2010b混合编程之环境配
- Matlab R2014a 安装教程
- matlab R2014a添加路径
- Matlab R2014a @newff函数
- matlab r2014a 和vs产品交叉编译问题
- MATLAB R2014a与VS2013混合编程(vs调用dll文件)
- 64位VS2012+64位matlab R2010b和32位VS2012+32位matlab R2010b 使用matlab engine实现混合编程配置
- MATLAB r2014a 下载+安装+激活
- MATLAB R2014a Builder JA总结
- Matlab r2014a调用C程序
- Ubuntu1404下安装MATLAB R2014A
- MATLAB R2014a Builder JA总结
- MATLAB R2014a 装 limsvm-3.17
- windows phone 和 VS2012 的混合编程
- VC++和Matlab混合编程
- Matlab和C混合编程
- c和matlab混合编程
- JSP自定义标签-第一个简单的例子
- parseInt
- leetcode31. Next Permutation
- UDP 客户端编程
- 如何对上司说“不”
- vs2012和Matlab R2014a混合
- c++中如何在主函数中调用其他文件内的函数?
- 在centos7安装SVN
- java按照规则进行字符串的填充
- ora-39002 ora-31694 ora-02354 ora-02368 ora-02369
- UDP 服务器端
- Faster RCNN理解
- Permutations II
- mongodb2.6数据导出导入