各反復でフレームを処理し、行列を生成するコードがあります。私の最終的な目標は、行列データを 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(){}