2

各反復でフレームを処理し、行列を生成するコードがあります。私の最終的な目標は、行列データを matlab に送信して、各フレームでの行列の進化を調べることです。これを実現するために、ヘッダー ファイル (helper.h) で静的変数 Engine を定義しました。

#include "engine.h";
#include "mex.h";
static Engine *engine;

main() プログラムでは、エンジンを 1 回だけ開きます。

#include helper.h   


main(){
if (!(engine = engOpen(NULL))) {
    MessageBox ((HWND)NULL, (LPSTR)"Can't start MATLAB engine",(LPSTR) "pcTest.cpp", MB_OK);
    exit(-1);}

//here comes frame processing using a while loop
.
.  //a function is called (defined in matrix.cpp)
.
//frame processing ends
}

そして、matrix.cpp の内部は、Matlab Engine に送信する行列を取得する場所なので、次のようにします。

#include helper.h

mxArray *mat;   
mat = mxCreateDoubleMatrix(13, 13, mxREAL);     
memcpy(mxGetPr(mat),matrix.data, 13*13*sizeof(double));
engPutVariable(engine, "mat", mat);

エンジンへのポインターを最も効率的な方法で使用したいと考えています。matlabエンジンを正しく使用する方法について少し混乱しています。

同じファイルにすべてのコードがあり、反復を使用しないため、matlabのドキュメントと例はまったく役に立たなかったので、どんな助けも歓迎します。前もって感謝します。

編集

エンジンポインターに関する最初の問題が解決されました。解決策は、それを extern として宣言することです。

#include "engine.h";
#include "mex.h";
extern Engine *engine;

そしてmain.cppで

#include helper.h   
Engine *engine=NULL;

main(){}
4

1 に答える 1

4

static「現在のコンパイル単位に対してローカル」を意味します。通常、コンパイル ユニットは 1 つの.cppファイルであるためengine、プログラムには 2 つの変数があり、1 つは にmain.o、もう 1 つは にありmatrix.oます。ヘッダー ファイルのように宣言engineextern、修飾子なしで正確に 1 つの.cppファイルで定義する必要があります。

helper.h:

extern Engine* engine;

main.cpp:

#include "helper.h"
Engine* engine = NULL;
于 2012-01-12T16:02:52.560 に答える