Использование Matlab "engine.h" из C++ правильно
У меня есть код, который обрабатывает кадры в каждой итерации и генерирует матрицу. Моя конечная цель - отправить данные матрицы в Matlab, чтобы изучить эволюцию матрицы с каждым кадром. Для этого я определил статическую переменную Engine в заголовочном файле (helper.h).
#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 ответ
static
означает "локально для текущего модуля компиляции". Единица компиляции, как правило, одиночная .cpp
файл, так что у вас есть два engine
переменные в вашей программе, один в main.o
и один в matrix.o
, Вы должны объявить engine
как extern
в заголовочном файле и определите его без какого-либо модификатора ровно в одном .cpp
файл.
helper.h:
extern Engine* engine;
main.cpp:
#include "helper.h"
Engine* engine = NULL;