#ifndef _MatlabHelp__
#define _MatlabHelp__
#include "stdafx.h"
#include "engine.h"
#include "matrix.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h> // 用于time函数
#include <vector>
#include <stdarg.h> // 添加这行
class MatlabHelp
{
public:
MatlabHelp();
~MatlabHelp();
// 检查MATLAB命令执行结果
int executeMatlabCommand(Engine* ep, const char* format, ...);
protected:
void checkEngine(Engine* ep, const char* operation);
// 从MATLAB矩阵获取数据到vector
void getMatlabArray(mxArray* array, std::vector<double>& data);
// 将vector转换为MATLAB矩阵
mxArray* createMatlabArray(const std::vector<double>& data, int rows, int cols);
private:
};
#endif
#include "stdafx.h"
#include "MatlabHelp.h"
// 错误处理函数
void checkEngine(Engine* ep, const char* operation) {
if (!ep) {
fprintf(stderr, "Error during %s: Failed to start MATLAB engine\n", operation);
exit(1);
}
}
MatlabHelp::MatlabHelp()
{
}
int MatlabHelp::executeMatlabCommand(Engine* ep, const char* format, ...)
{
if (!ep) return 0;
char cmd[1024];
va_list args;
va_start(args, format);
vsnprintf(cmd, sizeof(cmd), format, args);
va_end(args);
// 执行命令并检查错误
if (engEvalString(ep, cmd) != 0) {
fprintf(stderr, "Error executing MATLAB command: %s\n", cmd);
return 0;
}
return 1;
}
// 将vector转换为MATLAB矩阵
mxArray* MatlabHelp::createMatlabArray(const std::vector<double>& data, int rows, int cols) {
mxArray* array = mxCreateDoubleMatrix(rows, cols, mxREAL);
double* ptr = mxGetPr(array);
for (size_t i = 0; i < data.size(); i++) {
ptr[i] = data[i];
}
return array;
}
// 从MATLAB矩阵获取数据到vector
void MatlabHelp::getMatlabArray(mxArray* array, std::vector<double>& data) {
if (!array) return;
data.clear();
double* ptr = mxGetPr(array);
int n = mxGetNumberOfElements(array);
data.resize(n);
for (int i = 0; i < n; i++) {
data[i] = ptr[i];
}
}
// 错误处理函数
void MatlabHelp::checkEngine(Engine* ep, const char* operation) {
if (!ep) {
fprintf(stderr, "Error during %s: Failed to start MATLAB engine\n", operation);
exit(1);
}
}