2016/10/22 15:30
参考:http://blog.163.com/rongting_chen/blog/static/164906844201252354518462/
http://blog.csdn.net/sromg/article/details/8098026
matlab版本:R2012a,64位,VS2010
1:C语言调用matlab引擎。
VS新建工程:
设置项目属性:
包含以下两个目录,D:\Program Files\MATLAB\R2012a\extern\include和D:\Program Files\MATLAB\R2012a\extern\include\win64
matlab设置:
在matlab命令行输入mex -setup,按提示选择合适的选项
在matlab命令行输入mbuild -setup,按提示选择合适的选项
系统环境变量设置:
32位的是win32,64位的是win64.
Computer - > Properties -> Advanced system settings -> Environment Variables -> User Variables -> path, 添加(MATLAB下为MATLAB 2012软件安装目录)
...\MATLAB\extern\lib\win32\microsoft;
...\MATLAB\bin\win32
Computer - > Properties -> Advanced system settings -> Environment Variables -> System Variables -> path, 添加
...\MATLAB\runtime\win32;
...\MATLAB\bin;
...\MATLAB\extern\lib\win32\microsoft;
...\MATLAB\bin\win32
//输入以下代码,参考上面网页链接
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "engine.h"//matlab engine header file
//connection
#pragma comment( lib, "libeng.lib" )
#pragma comment( lib, "libmx.lib" )
#pragma comment( lib, "libmat.lib" )
int main()
{
Engine *ep;//open engine
if (!(ep =engOpen("\0")))
{
fprintf(stderr,"\n Cann't start MATLAB engine \n");
return EXIT_FAILURE;
}
int Nsample=50;
const double PI = 3.1415926;
double *t = new double[Nsample];//
for(int i = 0; i < Nsample; i++)
{
t[i] = i * 2 * PI / Nsample;
}
//将C数据格式转化为MATLAB格式数据
mxArray *T = NULL, *result = NULL;//定义指针
T = mxCreateDoubleMatrix(1, Nsample, mxREAL);
//memcpy((void *)mxGetPr(T), (void *)t, Nsample*sizeof(t[0]));
memcpy(mxGetPr(T), t, Nsample*sizeof(t[0]));
//推送到matlab进行计算
engPutVariable(ep, "T", T);//将数据送到matlab引擎
engEvalString(ep, "Y=sin(T);");
//engEvalString(ep, "Y=fft(T);");
engEvalString(ep, "plot(T,Y);");
engEvalString(ep, "title('y=sin(t)');");
engEvalString(ep, "xlabel('t');");
engEvalString(ep, "ylabel('y');");
printf("Hit return to continue\n\n");
fgetc(stdin);
//清楚变量
mxDestroyArray(T);
engEvalString(ep, "close;");
engClose(ep);
return EXIT_SUCCESS;
}
笔记:具体可以在matlab的帮助里查看具体函数的说明。
C程序调用matlab生成的dll
此方法不需要完全的matlab,只需要有matlab环境即可
需要matlab完成的功能做成一个matlab函数,然后利用mcc命令编译,得到h、dll、lib等文件,在C工程中只需加入上述文件即可
在matlab命令行中输入
mcc -B csharedlib:showBER showBER.m
c++时用cpplib.
cpplib Used for building a C++ shared library.
csharedlib Used for building a C shared library.
相比
mcc -W cpplib:multi2 -T link:lib multi2.m -d E:\matlab_work\QPTEST\QPMAT命令要简化很多。
matlab新建m文件,利用mcc命令编译。
编译后,有需要的.h.dll.lib文件。
注:并不是所有的函数都可以被编译,好像神经网络就不能编译,matlab禁止
然后把生成的文件添加到工程中去。