正确使用c ++中的Matlab“engine.h”

时间:2012-01-12 15:59:06

标签: c++ matlab matlab-engine

我有一个代码,在每次迭代中处理帧并生成矩阵。我的最终目标是将矩阵数据发送到matlab,以便检查每帧的矩阵演变。 为了实现这一点,我在头文件(helper.h)中定义了一个静态变量Engine。

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

在main()程序中,我只打开引擎一次:

#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文档和示例完全没有帮助,因为它们将所有代码放在同一个文件中,并且它们不使用迭代。提前谢谢。

修改

关于引擎指针解决了第一个问题。解决方案是将其声明为外部。

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

和main.cpp

#include helper.h   
Engine *engine=NULL;

main(){}

1 个答案:

答案 0 :(得分:4)

static表示“当前编译单元的本地”。编译单元通常是单个.cpp文件,因此您的程序中有两个engine个变量,一个位于main.o,另一个位于matrix.o。您需要在头文件中将engine声明为extern,并在一个.cpp文件中定义它而不需要任何修改器。

helper.h:

extern Engine* engine;

main.cpp中:

#include "helper.h"
Engine* engine = NULL;