2016-07-06 2 views
1

hereで書かれたMEX関数のC++ /スタンドアロンコードを探しています。 C++/MEXファイルからC++スタンドアロンを簡単に作ることは可能ですか?可能であれば、それをやり直すためのヒントがあれば、それはより速くなります。C++/MEX(Matlab)コードをスタンドアロンC++に変換できますか?

どのようにC++の型にでmexFunctionの引数を変換する例えば

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の同等物にシムレイヤーを書き込むことができますが、それは悪い考えです。

mxArrayvoid*にマップすることができます。これは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

関連する問題