脫離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).
請問有高手能幫我解決一下嗎?多謝 

 

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com