matlab与vs2008联合编程

留着慢慢学
原文地址: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. 程序写完了,加入相应的库函数即可

[转载]matlab与vs2008联合编程

[转载]matlab与vs2008联合编程

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联合编程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值