利用mcc命令将*.m文件中的函数,z=try02(x,y)转换成dll在VC中调用,已经成功,下面是在VC中的调用程序;是一个简单的加法函数。
static double x[1];
static double y[1];
double *z;
x[0]=m_x; //m_x输入值
y[0]=m_y;
mxArray* mx=NULL;
mxArray* my=NULL;
mxArray* mz=NULL;
mlfAssign(&mx, mlfDoubleMatrix(1,1,x,NULL));
mlfAssign(&my, mlfDoubleMatrix(1,1,y,NULL));
//t=mxCreateDoubleMatrix(1,1,mxREAL);
//memcpy(mxGetPr(t),&x,sizeof(double));
mz=mlfTry02(mx,my); //*.m文件转换过来的函数
z=(double*)mxGetData(mz);
//z=mxGetPr(mz);
//CString str;
//str.Format("the number is %f !",*z);
//MessageBox(str);
m_z=*z;
UpdateData(FALSE);
mxDestroyArray(mx);
mxDestroyArray(my);
mxDestroyArray(mz);
问题是如果我在*.m文件中的函数如果有多个参数,按照上面的调用方法应用程序却强行中止了。不知道是什么原因,以下是例程,其中出错的那句有说明
CString pathName;
int nRs=1024;//该数值不确定
CFileDialog dlg(TRUE,_T("*.dat"), "",NULL,
"Data Files(*.dat)|*.dat*|All Files (*.*)|*.*||");
int ret=dlg.DoModal();
if(ret==IDOK)
{
pathName=dlg.GetPathName();
}
else
return;
mxArray *threshold = NULL;
mxArray *bNNetProc = NULL;
mxArray *scanningStep = NULL;
mxArray *filename = NULL;
mxArray *rsRef = NULL;
mxArray *rsMeas = NULL;
mxArray *slope = NULL;
//char buffer[301];
static double th[1];
static double nn[1];
static double st[1];
th[0]=0.8;
nn[0]=1;
st[0]= StepLength;//输入参数
/*
* Create variable
*/
mlfAssign(&threshold, mlfDoubleMatrix(1,1,th,NULL));
mlfAssign(&bNNetProc, mlfDoubleMatrix(1,1,nn,NULL));
mlfAssign(&scanningStep, mlfDoubleMatrix(1,1,st,NULL));
filename = mxCreateString(pathName);
mxSetName(filename,"filename");
rsRef = mxCreateDoubleMatrix(1, nRs, mxREAL);
mxSetName(rsRef,"rsRef");
rsMeas = mxCreateDoubleMatrix(1, nRs, mxREAL);
mxSetName(rsMeas,"rsMeas");
slope = mxCreateDoubleMatrix(1, nRs, mxREAL);
mxSetName(slope,"slope");
rsRef=mlfFileproc_profile(&rsMeas,&slope,filename,bNNetProc,threshold,scanningStep);
//运行该函数发生强行中止
//该函数在*.m中的原型为function [rs_Ref,rs_Meas,slope] = fileproc_profile(filename,bNNetProc,threshold,scanningStep)
//编译成dll文件后,在*.h文件中的函数说明就为
//extern mxArray * mlfSinglestability(mxArray **rs_Meas,
//mxArray **slope,
//mxArray * filename,
//mxArray * sampleInterval,
//mxArray * threshold,
//mxArray * bNNetProc);
mxDestroyArray(threshold);
mxDestroyArray(bNNetProc);
mxDestroyArray(scanningStep);
mxDestroyArray(filename);
mxDestroyArray(rsRef);
mxDestroyArray(rsMeas);
mxDestroyArray(slope);
这个冬冬还没法调试,在debug中只是说
Detected memory leaks!
Dumping objects ->
strcore.cpp(118) : {98} normal block at 0x021A2FD0, 27 bytes long.
Data: < F:/0> 01 00 00 00 0E 00 00 00 0E 00 00 00 46 3A 5C 30
strcore.cpp(118) : {95} normal block at 0x021A1100, 59 bytes long.
Data: < . . Data> 01 00 00 00 2E 00 00 00 2E 00 00 00 44 61 74 61
Object dump complete.
The thread 0x2544 has exited with code 1 (0x1).
The program 'I:/try/matlabpj/hihi/Debug/hihi.exe' has exited with code 1 (0x1).
请问有高手能帮我解决一下吗?多谢
static double x[1];
static double y[1];
double *z;
x[0]=m_x; //m_x输入值
y[0]=m_y;
mxArray* mx=NULL;
mxArray* my=NULL;
mxArray* mz=NULL;
mlfAssign(&mx, mlfDoubleMatrix(1,1,x,NULL));
mlfAssign(&my, mlfDoubleMatrix(1,1,y,NULL));
//t=mxCreateDoubleMatrix(1,1,mxREAL);
//memcpy(mxGetPr(t),&x,sizeof(double));
mz=mlfTry02(mx,my); //*.m文件转换过来的函数
z=(double*)mxGetData(mz);
//z=mxGetPr(mz);
//CString str;
//str.Format("the number is %f !",*z);
//MessageBox(str);
m_z=*z;
UpdateData(FALSE);
mxDestroyArray(mx);
mxDestroyArray(my);
mxDestroyArray(mz);
问题是如果我在*.m文件中的函数如果有多个参数,按照上面的调用方法应用程序却强行中止了。不知道是什么原因,以下是例程,其中出错的那句有说明
CString pathName;
int nRs=1024;//该数值不确定
CFileDialog dlg(TRUE,_T("*.dat"), "",NULL,
"Data Files(*.dat)|*.dat*|All Files (*.*)|*.*||");
int ret=dlg.DoModal();
if(ret==IDOK)
{
pathName=dlg.GetPathName();
}
else
return;
mxArray *threshold = NULL;
mxArray *bNNetProc = NULL;
mxArray *scanningStep = NULL;
mxArray *filename = NULL;
mxArray *rsRef = NULL;
mxArray *rsMeas = NULL;
mxArray *slope = NULL;
//char buffer[301];
static double th[1];
static double nn[1];
static double st[1];
th[0]=0.8;
nn[0]=1;
st[0]= StepLength;//输入参数
/*
* Create variable
*/
mlfAssign(&threshold, mlfDoubleMatrix(1,1,th,NULL));
mlfAssign(&bNNetProc, mlfDoubleMatrix(1,1,nn,NULL));
mlfAssign(&scanningStep, mlfDoubleMatrix(1,1,st,NULL));
filename = mxCreateString(pathName);
mxSetName(filename,"filename");
rsRef = mxCreateDoubleMatrix(1, nRs, mxREAL);
mxSetName(rsRef,"rsRef");
rsMeas = mxCreateDoubleMatrix(1, nRs, mxREAL);
mxSetName(rsMeas,"rsMeas");
slope = mxCreateDoubleMatrix(1, nRs, mxREAL);
mxSetName(slope,"slope");
rsRef=mlfFileproc_profile(&rsMeas,&slope,filename,bNNetProc,threshold,scanningStep);
//运行该函数发生强行中止
//该函数在*.m中的原型为function [rs_Ref,rs_Meas,slope] = fileproc_profile(filename,bNNetProc,threshold,scanningStep)
//编译成dll文件后,在*.h文件中的函数说明就为
//extern mxArray * mlfSinglestability(mxArray **rs_Meas,
//mxArray **slope,
//mxArray * filename,
//mxArray * sampleInterval,
//mxArray * threshold,
//mxArray * bNNetProc);
mxDestroyArray(threshold);
mxDestroyArray(bNNetProc);
mxDestroyArray(scanningStep);
mxDestroyArray(filename);
mxDestroyArray(rsRef);
mxDestroyArray(rsMeas);
mxDestroyArray(slope);
这个冬冬还没法调试,在debug中只是说
Detected memory leaks!
Dumping objects ->
strcore.cpp(118) : {98} normal block at 0x021A2FD0, 27 bytes long.
Data: < F:/0> 01 00 00 00 0E 00 00 00 0E 00 00 00 46 3A 5C 30
strcore.cpp(118) : {95} normal block at 0x021A1100, 59 bytes long.
Data: < . . Data> 01 00 00 00 2E 00 00 00 2E 00 00 00 44 61 74 61
Object dump complete.
The thread 0x2544 has exited with code 1 (0x1).
The program 'I:/try/matlabpj/hihi/Debug/hihi.exe' has exited with code 1 (0x1).
请问有高手能帮我解决一下吗?多谢