2016-07-06 89 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