2

我有一个代码可以在每次迭代中处理帧并生成一个矩阵。我的最终目标是将矩阵数据发送到 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 引擎的矩阵,所以我做了这样的事情:

#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表示“当前编译单元的本地”。编译单元通常是单个.cpp文件,因此您engine的程序中有两个变量,一个 inmain.o和一个 in matrix.o. 您需要在头文件中声明engineextern在没有任何修饰符的情况下在一个.cpp文件中定义它。

助手.h:

extern Engine* engine;

主.cpp:

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