很多种方法啊,我知道啊
可是我的matlab激活不彻底,无法直接编译成dll、lib
让别人帮忙编译,结果32位和64位,平台又不对
所以最好用的matlab engine
环境配置
包含目录增加:C:\Program Files\MATLAB\R2012b\extern\include
库目录增加:C:\Program Files\MATLAB\R2012b\extern\lib\win64\microsoft
然后是新增64位平台
这是一个matlab生成dll的文章,里面环境配置说的很清楚
代码
我用的还是engine
#include <stdlib.h>
#include<stdio.h>
#include "engine.h"
#include<string.h>
#include<math.h>
#pragma comment(lib,"libeng.lib")
#pragma comment(lib,"libmx.lib")
#define TEST_SIZE 192
#define RESULT_SIZE 96
void SAE_MATLAB(double * frame,double * result)
{
Engine *ep; //定义Matlab引擎指针。
int i;
mxArray *test_x = mxCreateDoubleMatrix(1,TEST_SIZE, mxREAL); //matlab 数组 test_x
if (!(ep=engOpen(NULL))) //测试是否启动Matlab引擎成功。
{
printf("Can't start Matlab engine!\n");
}
else
printf("success\n");
memcpy(mxGetPr(test_x), frame, TEST_SIZE*sizeof(double)); //将数组frame复制到mxarray数组test_x中。
engEvalString (ep, "cd E:\\SAE_MATLAB"); //进入m文件所在文件夹
engPutVariable(ep, "test_x",test_x); //将mxArray数组test_x写入到Matlab工作空间,命名为test_x。
engEvalString (ep, "result=sae_c(test_x)");
memcpy(result,mxGetPr(engGetVariable(ep,"result")), RESULT_SIZE*sizeof(double)); //将result结果存到result数组中。
engClose(ep);
}
int main()
{
int i;
double test_x[TEST_SIZE];
double test_y[RESULT_SIZE];
for(i=0;i<TEST_SIZE;i++)
{
test_x[i]=(i+2.0)/200;
}
SAE_MATLAB(test_x,test_y);
return 0;
}
不过啊,这个要保证你的matlab要完整了
有输入代入matlab,然后输出传回c
其实就感觉就是传值啊
进入m文件文件夹,然后将要用的变量保存到命名空间
然后调用函数
最后回传
也折腾了我快一天了