matlab建立mex,Visual Studio创建Matlab mex(dll)函数

7). 然后打开project

-> test_matlab_3 properties -> C++

-> Code Generation -> Runtime

Library,选择 Multi-threaded Debug (/MTd)。a4c26d1e5885305701be709a3d33442f.png

8). 然后打开project -> test_matlab_3 properties

-> Linker -> Input ->

Additional Dependencies中添加

libmx.lib,libmat.lib,libmex.lib,libeng.lib。a4c26d1e5885305701be709a3d33442f.png

9).

然后打开project -> test_matlab_3 properties

-> Linker -> Input ->

Module Definition File中添加 .\mexFunction.def。a4c26d1e5885305701be709a3d33442f.png

10).

然后打开project -> add new item,添加Module-Definition File

文件名为mexFunction.def。文件代码后附。a4c26d1e5885305701be709a3d33442f.png

11).

然后打开project -> add new item,添加Header File

文件名为mexFunction.h。文件代码后附。a4c26d1e5885305701be709a3d33442f.png

12).

编译,链接,生成test_matlab_3.dll文件,也就是我们想要的mex文件。

13).

将生成的文件拷贝到matlab目录下,执行"test_matlab_3(1,'Panpan Hu')",返回如下结果a4c26d1e5885305701be709a3d33442f.png

注意:本质上来讲mex和dll没有区别,只是两个不同的后缀名。Matlab2010b以后版本可能不支持调用dll为后缀的mex文件。消息来源如下

A MEX-file is a shared library dynamically loaded at runtime.

Shared libraries are sometimes called .dll files, for

dynamically-linked library. MEX-files have a platform-dependent

extension, which the mex function automatically

assigns.

On 32-bit Windows platforms, the extension is .mexw32.

MATLAB has supported .dll as a secondary MEX-file

extension since Version 7.1 (R14SP3). In Version 7.7 (R2008b), if

you used the -output switch to create a MEX-file with a

.dll extension, MATLAB displayed a warning message that

such usage is being phased out.

In MATLAB Version 7.10 (R2010a), you can no longer create a

MEX-file with a .dll file extension. If you try to, MATLAB

creates the MEX-file with the proper extension and displays the

following warning:

Warning: Output file was specified with file extension, ".dll", which

is not a proper MEX-file extension. The proper extension for

this platform, ".mexw32", will be used instead.

MATLAB continues to execute a MEX-file with a .dll

extension, but future versions of MATLAB will not support this

extension.

本文参考如下网络资源

http://blog.sina.com.cn/s/blog_4d1865f00100o2ul.html

http://www.engineering.uiowa.edu/~dip/lecture/C++_with_Matlab.pdf

附录1 mexFunction.cpp

#include "mexFunction.h"

#include

#include "stdlib.h"

#include

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[1])*mxGetN(prhs[1])+1;

char

*Path_Str_ch = new char[bufferlength];

short

Encoder_Decoder; // 0: encoder, 1: decoder

Encoder_Decoder_db = mxGetPr(prhs[0]);

mxGetString(prhs[1], Path_Str_ch,

bufferlength); Encoder_Decoder = (short) *Encoder_Decoder_db;

Path_Str =

Path_Str + Path_Str_ch;

mexPrintf("\nBegin of Test-Zhao Wang 6.2.2011\n");

mexPrintf("%d, %s\n", Encoder_Decoder, Path_Str_ch);

mexPrintf("End of Test-Zhao Wang 6.2.2011\n");

}

附录2 mexFunction.h

#include "matrix.h"

#include "mex.h"

#define TEST_MATLAB_3_EXPORTS

#ifdef TEST_MATLAB_3_EXPORTS

#define MEX_FUNCTION_API __declspec(dllexport)

#else

#define MEX_FUNCTION_API __declspec(dllimport)

#endif

MEX_FUNCTION_API void mexFunction(int nlhs, mxArray* plhs[],int

nrhs, mxArray* prhs[]);

附录3 mexFunction.def

LIBRARY "test_matlab_3"

EXPORTS

mexFunction

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值