您的位置:首页 > 编程语言 > MATLAB

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即可



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: