7). 然后打開project
-> test_matlab_3 properties -> C++
-> Code Generation -> Runtime
Library,,選擇 Multi-threaded Debug (/MTd),。
8). 然后打開project -> test_matlab_3 properties
-> Linker -> Input ->
Additional Dependencies中添加
libmx.lib,libmat.lib,,libmex.lib,,libeng.lib。
9).
然后打開project -> test_matlab_3 properties
-> Linker -> Input ->
Module Definition File中添加 .\mexFunction.def,。
10).
然后打開project -> add new item,,添加Module-Definition File
文件名為mexFunction.def。文件代碼后附,。
11).
然后打開project -> add new item,,添加Header File
文件名為mexFunction.h。文件代碼后附,。
12).
編譯,,鏈接,生成test_matlab_3.dll文件,,也就是我們想要的mex文件,。
13).
將生成的文件拷貝到matlab目錄下,執(zhí)行"test_matlab_3(1,'Panpan Hu')",,返回如下結(jié)果
注意:本質(zhì)上來(lái)講mex和dll沒有區(qū)別,,只是兩個(gè)不同的后綴名。Matlab2010b以后版本可能不支持調(diào)用dll為后綴的mex文件,。消息來(lái)源如下
http://www./help/techdoc/matlab_external/bsehn8g.html
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.
本文參考如下網(wǎng)絡(luò)資源
http://blog.sina.com.cn/s/blog_4d1865f00100o2ul.html
http://www.engineering./~dip/lecture/C++_with_Matlab.pdf
附錄1 mexFunction.cpp
#include "mexFunction.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[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