我有一个代码,在每次迭代中处理帧并生成矩阵。我的最终目标是将矩阵数据发送到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(){}
答案 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;