matlab与vs2008联合编程
2016-06-26 10:45
369 查看
留着慢慢学原文地址:matlab与vs2008联合编程作者:HuoChengfu
折腾了一天,终于把程序写完,实现了matlab和vs2008的联合编程(算法程序时以前就用C写好了的,所以并没有花很多时间写算法),现在把过程记下来,以便借鉴。
1、安装matlab和vs2008
安装完后,很有可能在matlab中输入命令mex
-setup不会出现vs2008编译器选项,其中的设置细节可以参见我很早以前的一篇博文:http://blog.sina.com.cn/s/blog_4d1865f00100hz9e.html
2、在vs2008中编写的主函数必须是mexFunction(),相当于普通C程序的main()函数,他的几个参数的格式也是必须按固定的格式
下面是我用的一个简单示例XXX.pp,分别说明浮点型、字符串型的参数传递。需要注意Path_Str,
Path_Str.c_str()的输出,不要像我一样被表面现象欺骗了。
#include "mex.h"
#include <string>
#include "stdlib.h"
#include <iostream>
using namespace std;
void mexFunction( int nlhs, mxArray *plhs[],
int nrhs, const mxArray*prhs[] )
{
double *Encoder_Decoder_db =
NULL;
string
Path_Str="";
// the path of the bands
unsigned int bufferlength =
mxGetM(prhs[4])*mxGetN(prhs[4])+1;
char *Path_Str_ch = new char[bufferlength];
short Encoder_Decoder; // 0: encoder, 1:
decoder
Encoder_Decoder_db = mxGetPr(prhs[0]);
mxGetString(prhs[4], Path_Str_ch,
bufferlength);
Encoder_Decoder = (short)
*Encoder_Decoder_db;
Path_Str = Path_Str + Path_Str_ch;
mexPrintf("%d, %s, %s, %s",
Encoder_Decoder, Path_Str_ch, Path_Str,
Path_Str.c_str());
}
->mex -v XXXX.cpp
输入:XXX(1,'E:\paper')
输出:1,'E:\paper',@#,'E:\paper'
注意,当有多个源文件时,例如XXX.cpp调用了一个类(YYY.cpp和YYY.h),正确编译为
-> mex -v XXX.cpp
YYY.cpp
(PS:所有源文件都必须被编译,但h文件不用编译)
3. 程序写完了,加入相应的库函数即可
4.为了在vs环境中编译mex,除了按步骤3设置路径外,还需做一些工作。
1)新建一个wind32
application,工程名为XXX(同前cpp文件),选择DLL和Empty project类型
2)将XXX.cpp文件加入该project
3)新建一个XXX.def文件,并保存在该project中
XXX.def的内容为
LIBRARY
XXX.DLL
EXPORTS
mexFunction
4)在preprocessor中加入libmx.lib,libmex.lib,libmat.lib即可
折腾了一天,终于把程序写完,实现了matlab和vs2008的联合编程(算法程序时以前就用C写好了的,所以并没有花很多时间写算法),现在把过程记下来,以便借鉴。
1、安装matlab和vs2008
安装完后,很有可能在matlab中输入命令mex
-setup不会出现vs2008编译器选项,其中的设置细节可以参见我很早以前的一篇博文:http://blog.sina.com.cn/s/blog_4d1865f00100hz9e.html
2、在vs2008中编写的主函数必须是mexFunction(),相当于普通C程序的main()函数,他的几个参数的格式也是必须按固定的格式
下面是我用的一个简单示例XXX.pp,分别说明浮点型、字符串型的参数传递。需要注意Path_Str,
Path_Str.c_str()的输出,不要像我一样被表面现象欺骗了。
#include "mex.h"
#include <string>
#include "stdlib.h"
#include <iostream>
using namespace std;
void mexFunction( int nlhs, mxArray *plhs[],
int nrhs, const mxArray*prhs[] )
{
double *Encoder_Decoder_db =
NULL;
string
Path_Str="";
// the path of the bands
unsigned int bufferlength =
mxGetM(prhs[4])*mxGetN(prhs[4])+1;
char *Path_Str_ch = new char[bufferlength];
short Encoder_Decoder; // 0: encoder, 1:
decoder
Encoder_Decoder_db = mxGetPr(prhs[0]);
mxGetString(prhs[4], Path_Str_ch,
bufferlength);
Encoder_Decoder = (short)
*Encoder_Decoder_db;
Path_Str = Path_Str + Path_Str_ch;
mexPrintf("%d, %s, %s, %s",
Encoder_Decoder, Path_Str_ch, Path_Str,
Path_Str.c_str());
}
->mex -v XXXX.cpp
输入:XXX(1,'E:\paper')
输出:1,'E:\paper',@#,'E:\paper'
注意,当有多个源文件时,例如XXX.cpp调用了一个类(YYY.cpp和YYY.h),正确编译为
-> mex -v XXX.cpp
YYY.cpp
(PS:所有源文件都必须被编译,但h文件不用编译)
3. 程序写完了,加入相应的库函数即可
4.为了在vs环境中编译mex,除了按步骤3设置路径外,还需做一些工作。
1)新建一个wind32
application,工程名为XXX(同前cpp文件),选择DLL和Empty project类型
2)将XXX.cpp文件加入该project
3)新建一个XXX.def文件,并保存在该project中
XXX.def的内容为
LIBRARY
XXX.DLL
EXPORTS
mexFunction
4)在preprocessor中加入libmx.lib,libmex.lib,libmat.lib即可
相关文章推荐
- matlab 相同函数名解决
- Matlab 代码注释
- Matlab的联机帮助
- matlab 入门(1)
- <<matlab>>matlab高数实验准备工作
- matlab中uigetfile的用法
- 遗传算法
- matlab 2014b提示 low-level graphics 时的两步走解决方案
- Matlab与单片机的串行通信及数据处理
- 64位VS2012+64位matlab R2010b和32位VS2012+32位matlab R2010b 使用matlab engine实现混合编程配置
- Matlab图像处理笔记(二)
- Matlab图像处理笔记(一)
- matlab一些函数的区别和联系
- matlab调用c++,应该用mex把cpp编译成 .mex文件供MATLAB在命令行方式下调用吧
- matlab之any()、imshow()、image()、imagesc()、取整函数fix, floor, ceil,round
- 归一化的matlab实现
- [置顶] MATLAB常用的快捷键
- 【转载】Matlab中如何加载.mat变成矩阵形式
- 基于Kmeans的证件照背景色替换算法
- matlab对excel数据进行排序求和