脫離matlab環境,在VC種運行
利用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).
請問有高手能幫我解決一下嗎?多謝
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.