2016-07-06 88 views
1

我正在寻找来自MEX功能的C++ /独立代码,它已被写入here。是否有可能从C++/MEX文件轻松地使C++独立?如果可能的话,任何提示可以更轻松地做到这一点,我们非常感谢。是否有可能将C++/MEX(Matlab)代码转换为独立的C++?

例如如何Mexfunction参数转换为C++类型

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) 
{ 

    //declare variables 
    mxArray *phi_out, *C_out, *label_out, *mxPhi, *C_in; 
const mxArray *mxImg; 

    const mwSize *mdims; 
    double *img, *phi, *B, *mask, *C, *label; 
    double *F; 
    double usum, vsum, dthresh, lambda, rad; 
    int iter,countdown,display; 
    long dims[5]; 
    long dimx, dimy, dimz, numdims; 
    LL *Lz, *Ln1, *Ln2, *Lp1, *Lp2; 
    LL *Sz, *Sn1, *Sn2, *Sp1, *Sp2; 
    LL *Lin2out, *Lout2in; 
// and ..... 

即什么是mxArray,LL类型以及如何在C++定义的?

回答

0

它很容易,但不能以自动化的方式完成,因为许多MATLAB特定功能需要运行MATLAB副本。如果你真的,真的不能改变源代码,你可能会写一个从MATLAB函数调用到他们的C等价物的填充层,但这不是个好主意。

mxArray可以映射到一个void*,在MEX的范例中投下一切。

The entry in `matrix.h` looks like: 
/* 
* Forward declaration for mxArray 
*/ 
typedef struct mxArray_tag mxArray; 

/* 
* Type representing the signature for MEX functions. 
*/ 
typedef void (*mxFunctionPtr) (int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[]); 
+0

你是什么意思运行matlab的副本?我应该在计算机上使用Matlab的副本,我总是运行代码?它不能独立呢? – Ehsan

+2

Mex文件将调用只应从MATLAB运行副本调用的函数。例如,注册内存的函数。另一方面,大多数mex文件都包含可以手动修改的可理解的C/C++代码,您可以毫不费力地将其转换为标准库调用。 – Mikhail