Matlab R2012a和vs 2010混合编程
来源:互联网 发布:南京联迪软件 编辑:程序博客网 时间:2024/04/30 17:25
环境:Matlab R2010a,vs 2010 ,win7, 64位操作系统
假设有一Matlab函数文件 MyAdd.m,内容如下:
function c = MyAdd( a,b )%UNTITLED Summary of this function goes here% Detailed explanation goes herec=a+b;end
一、matlab编译环境的设置
1、 >>mex –setup
Pleasechoose your compiler for building external interface (MEX) files:
Would you like mex to locate installed compilers [y]/n? n
这个地方如果选择y,那么就看不到vs2010 c++的编译器,只能看到C++6.0的(我电脑里装了这两个),我之前写的就是用C++6.0的编译器编译的DLL,再用VS2010可以调用成功的。如果这时候你想选择vs2010 c++的编译器,就要选择n,我想也应该可以的。
Would you like mex to locate installed compilers [y]/n? n
这个地方如果选择y,那么就看不到vs2010 c++的编译器,只能看到C++6.0的(我电脑里装了这两个),我之前写的就是用C++6.0的编译器编译的DLL,再用VS2010可以调用成功的。如果这时候你想选择vs2010 c++的编译器,就要选择n,我想也应该可以的。
接下来几个选择 y
2、>> mbuild –setup
同上1
3、然后,进行编译,命令如下:
>>mcc -W cpplib:libMyAdd -T link:lib MyAdd.m
>>mcc -W cpplib:libMyAdd -T link:lib MyAdd.m
会生成如下文件:
libMyAdd.cpp(这里有函数接口说明)
libMyAdd.dll
libMyAdd.h
libMyAdd.ctf
libMyAdd.lib
这四个是要用到的文件。
libMyAdd.cpp(这里有函数接口说明)
libMyAdd.dll
libMyAdd.h
libMyAdd.ctf
libMyAdd.lib
这四个是要用到的文件。
二、vs2010 配置
在Vs2010中创建一个工程(C++程序),对VC进行环境配置:
右键单击工程->属性->
(1) VC++目录,在“包含目录”中添加
C:\Program Files\MATLAB\R2012a\extern\include
(根据自己matlab安装的目录添加)
在“库目录”中添加:
C:\Program Files\MATLAB\R2012a\extern\lib\win64\microsoft
(我安装的是 64位的)
(2)链接器->输入,在“附加依赖项”中添加:
mclmcrrt.lib
libMyAdd.lib
(每个.lib占一行,后面无需任何标点)
64位还需设置:
(1)右键工程->属性->链接器->高级->目标计算机
将MachineX86改为MachineX64
(2)生成->配置管理器->平台
将Win32改为x64
至此,VC配置成功。
三、vs2010 调用matlab 函数
运行之前把第一步第3小步生成的.h,.dll,.lib(libMyAdd.h libMyAdd.lib libMyAdd.dll)三个文件放在Vs++程序的工程文件夹里
#include <stdio.h>#include <memory.h>#include <string>#include "libMyAdd.h"#include <mclmcr.h>using namespace std;void main(){double a = 6;double b = 9;double c;// initialize lib,这里必须做初始化!if( !libMyAddInitialize()){std::cout <<"Could not initialize libMyAdd!" << std::endl;//return -1;}// 为变量分配内存空间,可以查帮助mwArraymwArray mwA(1, 1, mxDOUBLE_CLASS); // 1,1表示矩阵的大小(所有maltab只有一种变量,就是矩阵,为了和Cpp变量接轨,设置成1*1的矩阵,mxDOUBLE_CLASS表示变量的精度)mwArray mwB(1, 1, mxDOUBLE_CLASS);mwArray mwC(1, 1, mxDOUBLE_CLASS);// set data,不用我解释了吧,很简单的,调用类里面的SetData函数给类赋值mwA.SetData(&a, 1);mwB.SetData(&b, 1);// using my add,掉我自己写的函数MyAdd(1, mwC, mwA, mwB);// get data,不用我解释了吧,很简单的,调用类里面的Get函数获取取函数返回值c = mwC.Get(1, 1);std::cout<<"c is " <<c<<std::endl;// 后面是一些终止调用的程序// terminate the liblibMyAddTerminate();// terminate MCRmclTerminateApplication();}
0 0
- Matlab R2012a和vs 2010混合编程
- vs2010和Matlab R2012a 混合编程
- Matlab R2010a和vs 2010混合编程
- Matlab R2010a和vs 2010混合编程
- Matlab R2010a和vs 2010混合编程
- MATLAB和VS混合编程
- MATLAB R2012a与vs2010混合编程 error LNK2019
- MATLAB R2012a与vs2010混合编程 error LNK2019
- MATLAB R2012a与vs2010混合编程 error LNK2019
- Matlab 与 vs 混合编程
- matlab 与VS 混合编程
- vs&matlab混合编程-- - mexw64
- MATLAB与VS混合编程
- VS和matlab混合编程的推荐书籍!
- matlab和c++混合编程---matlab和vs的环境配置问题
- Matlab与VS混合编程总结
- VS 调用 Matlab (混合编程)
- Qt(或者VS)+Matlab混合编程
- 让 select 的 option 标签支持事件监听(如复制操作)
- 关于空值null的排序问题 mysql 和oracle
- [Android] Gallery选中变大效果的实现
- PAT 1115. Counting Nodes in a BST (30)
- ssm整理
- Matlab R2012a和vs 2010混合编程
- ssh框架初步搭载
- 关于修改 标签input file 样式问题!
- Java Date 比较
- 从UDP的”连接性”说起–告知你不为人知的UDP
- 小编教你怎样重装系统win7
- Java线程池的设计与实现
- 留着
- 有限状态机