VC提供寄存器,matlab提供完备的数学公式,两者的结合是不是注定会擦出完美的火花来呢~
不过,网上一通找,也木有找到具体的配置方法,共同点就是
‘engine.h’头文件的引用,不过编译之前,许多include
和lib添加决定着各种dll文件查找的命运,VC6.0和VS的设置会有不同,这里只介绍VS2010版本的(亲身试验,木有问题的才放心写的哦
),为了避免以后的悲剧
我还是写下来留念一下吧~
matlab 版本:r2010b
环境: VS2010
配置:
1. 菜单:Project → Properties... 选择
Configuration Properties下的 VC++ Directories。
在 Include Directories
栏目中添加matlab相关的include文件。例如..\MATLAB\R2010b\extern\include和..\MATLAB\R2010b\extern\include\win32
在 Library Directories
栏目中添加matlab相关的lib文件。例如:...\MATLAB\R2010b\extern\lib\win32\microsoft。(为了保险,
我把这个lib文件也加进去了:...\MATLAB\R2010b\lib\win32)
2. 菜单:Project → Properties... 选择
Configuration Properties下的 Linker → Input。
在 Additional
Dependencies栏目中输入项目需要引用matlab的的lib文件库。例如:libeng.lib libmx.liblibmex.lib等(我直接写了三个~其他的什么的我也不清楚
)。如果要对所有的配置添加lib库文件,可先将左上角的
Configuration 中的 Active(Debug) 设置为 All
configurations。
3. 菜单:Project → Properties... 选择 Configuration
Properties下的 Linker → General。
在 Additional Library Directories
栏目中,添加库所在的目录名称。(目录查找可以根据第二步中填写的lib名字进行查找,如查找libeng,不过这里需要用后缀'.dll')。例如:...\MATLAB\R2010b\bin\win32
这一步相当的重要,不然的话,各种dll文件找不到,lib文件找不到之类的报错,头都大死了。
现在就可以混编程序了~
再也不用编译时出现好多 undefined 和
xxx之类的错误哦~
测试代码:(网上找来的……不过忘了源头在哪里了,先
,对编写者怀有无比的崇敬之情,允许我转载一下吧
)
#include "engine.h" // 包含引擎函数的头文件
#include
int main(int argc, char *argv[])
{
char buf[1024];
Engine *ep = engOpen(NULL); // 启动Matlab
engSetVisible(ep, false); // 设置窗口不可见
engOutputBuffer(ep, buf, 1024);
mxArray *mxN = mxCreateDoubleScalar(3);
engPutVariable(ep, "N", mxN);
// 将变量放置到Matlab空间中
engEvalString(ep, "D=rand(N, N)");
// 在Matlab环境中执行代码
mxArray *mxData = engGetVariable(ep, "D");
// 获得返回的结果
std::cout << buf
<< std::endl;
engClose(ep); // 关闭Matlab
system("pause");
return 0;
}
编译成功,
各种开心~