我在VC编程中使用Matlab引擎编程时,将matlab中的数据传送到VC,采用了如下操作:可不知为什么总是出现错误,哪位高手可以指点一下,谢谢了!!
mxArray *result=NULL;
result=engGetArray(MatEngine,MatVarName);
data=mxGetPr(result);
通过调试发现问题就出在最后一句。
mxArray *result=NULL;
result=engGetArray(MatEngine,MatVarName);
data=mxGetPr(result);
通过调试发现问题就出在最后一句。
[代码作者] 殷延伟
[文件大小] 17K
[更新日期] 2003-7-13 10:53:00
[下载次数] 52
http://www.vckbase.com/code/downcode.asp?id=2053
应该不会出现错误的。
你先看看你定义的data是不是指针变量,
而且要保证这个指针变量的类型和
MatVarName在MATLAB中的数据类型一样(或者可以兼容)。要是再不行
贴上你的源代码
有空帮你看看。
double* data=mxGetPr(result->GetData());
源代码如下:
void CMatlabTestView::OnMatlabAllself()
{
double time[10]={0,1,2,3,4,5,6,7,8,9},*pData;
mxArray *T=NULL,*d_result;
CString *result=NULL,string;
Engine *Myengine2;
if(!(Myengine2=engOpen(NULL)))
{ MessageBox("Error in Opening Engine!","haha",MB_OK);
return; }
T=mxCreateDoubleMatrix(1,10,mxREAL);
mxSetName(T,"T");
memcpy((char *)mxGetPr(T),(char *)time,10*sizeof(double));
engPutArray(Myengine2,T);
engEvalString(Myengine2,"D=05*(-9.8)*T^2;");
d_result=engGetArray(Myengine2,"D");
pData=(double *)mxGetPr(d_result);//调试时此句出错
int *Dimension=(int *)mxGetDimensions(d_result);
long total=1;
int i;
for(i=0;i<mxGetNumberOfDimensions(d_result);i++)
total+=Dimension[i];
result=new CString[total];
for(i=0;i<10;i++) string+=result[i]+"\n";
MessageBox(string,"haha",MB_OK);
engEvalString(Myengine2,"plot(T,D);");
mxDestroyArray(T);
mxDestroyArray(d_result);
engClose(Myengine2);
}
可能是你疏忽了
以前的:
engEvalString(Myengine2,"D=05*(-9.8)*T^2;"); 改为现在的
engEvalString(Myengine2,"D=5*(-9.8)*T.^2;");
就可以了
我调试过了
谢谢你的回复,问题解决了。
我刚刚涉及这方面的内容,对很多东西都还不是很明白,你能帮我解释一下下面这段程序对应每一步的具体含义么?mxGetDimensions和mxGetNumberOfDimensions这两个函数我在帮助文档中没有找到,只是从字面意思上摸索着来的。
麻烦你了!解决完我马上给你加分!!
int *Dimension=(int *)mxGetDimensions(d_result);
long total=1;
int i;
for(i=0;i<mxGetNumberOfDimensions(d_result);i++)
total+=Dimension[i];
result=new CString[total];
for(i=0;i<10;i++) string+=result[i]+"\n";
不用客气,再说我也是对此只知一二,大家互相学习。
const int* mxGetDimensions(const mxArray *array_ptr);
获得一个指向阵列维数大小的数组的指针。该指针指向的数组的元素包含了阵列每一维的大小,其中数组的第一个元素为阵列的行数,第二个为列数,第三个为阵列的页面数,以此类推。
int mxGetNumberOfDimensions(const mxArray *array_ptr);
获得阵列的维数。
PS:你按照函数的字面理解也是可行的,
其实很多时候,你要多试,时间长了,你就会了,好运!