请教各位大侠!本人现在在VC中编了一个小的MATLAB引擎程序,引擎开启,但是命令却没有执行,请问为什么?下附程序:
void main()
{
Engine *ep;
//mxArray *a=NULL;
//double Areal[6]={1,2,3,4,5,6};
//a=mxCreateDoubleMatrix(3,2,mxREAL);
//memcpy((char *)mxGetPr(a),(char *)Areal, 6*sizeof(double));
//mxSetName(a,"A");
/*Start the MATLAB engine */ if (!(ep = engOpen(NULL)))
{
MessageBox ((HWND)NULL, (LPSTR)
"Can't start MATLAB engine", (LPSTR)"Engwindemo.c",MB_OK);
exit(-1);
}
//engEvalString(ep,"disp(rand(5,3))");
engEvalString(ep, "contour(peaks)");
engEvalString(ep, "xlabel('x'),ylabel('y'),zlabel('z')");
//engEvalString(ep,"whos");
engClose(ep);
}
上面程序中, engEvalString(ep, "contour(peaks)");以及engEvalString(ep, "xlabel('x'),ylabel('y'),zlabel('z')");可以正常执行,即在MATLAB界面上画图,但是如果换成了engEvalString(ep,"disp(rand(5,3))");或engEvalString(ep,"display(‘I LOVE YOU')");;就不能在MATLAB界面上显示结果;engEvalString(ep,"whos");用于查看matlab工作空间中的各变量信息语句engEvalString(ep,"whos");也不能显示对话框。我不知道为什么,请大侠指教!感激不尽!!!!
void main()
{
Engine *ep;
//mxArray *a=NULL;
//double Areal[6]={1,2,3,4,5,6};
//a=mxCreateDoubleMatrix(3,2,mxREAL);
//memcpy((char *)mxGetPr(a),(char *)Areal, 6*sizeof(double));
//mxSetName(a,"A");
/*Start the MATLAB engine */ if (!(ep = engOpen(NULL)))
{
MessageBox ((HWND)NULL, (LPSTR)
"Can't start MATLAB engine", (LPSTR)"Engwindemo.c",MB_OK);
exit(-1);
}
//engEvalString(ep,"disp(rand(5,3))");
engEvalString(ep, "contour(peaks)");
engEvalString(ep, "xlabel('x'),ylabel('y'),zlabel('z')");
//engEvalString(ep,"whos");
engClose(ep);
}
上面程序中, engEvalString(ep, "contour(peaks)");以及engEvalString(ep, "xlabel('x'),ylabel('y'),zlabel('z')");可以正常执行,即在MATLAB界面上画图,但是如果换成了engEvalString(ep,"disp(rand(5,3))");或engEvalString(ep,"display(‘I LOVE YOU')");;就不能在MATLAB界面上显示结果;engEvalString(ep,"whos");用于查看matlab工作空间中的各变量信息语句engEvalString(ep,"whos");也不能显示对话框。我不知道为什么,请大侠指教!感激不尽!!!!
解决方案 »
- ADO的stream对象能否从CMemFile中读取数据
- 高分提问:添加日历控件10后无法通过编译,求知心切!!!
- 为什么只能全局注入 不能单进程?
- failed to (or don't know how to)...的问题怎么解决?
- 请问VC中一维的动态数组怎么去实现
- 窗口互访问题
- 如何实现每个子窗口都在任务栏占用一个位置,像IE一样???
- ___________________请教大侠关于MDI应用方面的问题_________________
- 關於滑鼠拖移視窗的問題,我是新手請多多包包含謝謝。
- 这个书啊,该怎么看?——请教先后顺序!
- 请较,急急!!!!!!
- 进来拿分,新手读程序,这句看不太懂
作者: 殷延伟
MATLAB广泛应用于线性代数、自动控制理论、数理统计、数字信号处理、时间序列分析、动态系统仿真等领域。因此如果在VC中对MATLAB进行调用将大大减少编程的工作量、保证程序的准确性,并且继承了VC++强大的功能,提高开发效率,本文将介绍了在VC中使用MATLAB函数库的具体步骤:在VC中建立一个项目后: 1.设置:添加路径:
在project-settings-c/C++-category:-preprocessor-Additional include directories:栏目中添加:
D:\MATLAB6P1\EXTERN\INCLUDE,
D:\MATLAB6P1\EXTERN\INCLUDE\CPP,
D:\MATLAB6P1\EXTERN\LIB lib
在project-settings-c/C++-category:-preprocessor-preprocessor definitions: 栏目中添加:
MSVC,MSWIND
在project-settings-Link-Category-Input-Ignore libraries:栏目中添加:msvcrt.lib 2. 添加头文件:(假设matlab文件为x.m) #include "matlab.hpp"
#include x.hpp //如果有从.m编译成.cpp的文件x.hpp 和x.cpp;在x.cpp中添加#include "StdAfx.h" 3.在matlab中的编译方法:
用mcc命令转化为c/c++代码,命令行参数如下:
生成c文件: mcc –t –L C x.m
生成c++文件: mcc –t –L Cpp x.m
生成动态链接库函数: mcc –t –W lib:y –T link.lib x.m(y为生成的链接文件名) 4.导入链接库: #pragma comment (lib, "libmatlb.lib")
#pragma comment (lib, "libmx.lib")
#pragma comment (lib, "libmatpm.lib") // c++ maths library 5.参考代码如下: double d[] = { 1, 2, 3, 4 };
mwArray A(2, 2, d);mwArray arrVal,arrVec;
arrVec = eig(&arrVal,A);
double* a = new double[4];
double* b = new double[4];for (int i=0; i < 4; i++)
{
a[i] = *(mxGetPr(arrVal.GetData())+i); //正序
b[i] = *(mxGetPr(arrVec.GetData())+i);//逆序
}(完)
http://www.vckbase.com/document/viewdoc/?id=787希望对你有帮助!
你可以用matcom来解决这一类问题