脱离matlab环境,在VC种运行
来源:互联网 发布:java编写简易计算器 编辑:程序博客网 时间:2024/06/05 03:58
利用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).
请问有高手能帮我解决一下吗?多谢
- 脱离matlab环境,在VC种运行
- 让matlab程序脱离matlab环境运行
- matlab 7与vc/mfc混合编程 脱离运行环境,移植代码
- matalb7与VC2008混合编程DLL方法(四)脱离matlab和VC环境的运行和程序发布
- 脱离matlab运行可执行程序
- VC6.0与matlab混合编程( 脱离matlab运行环境)方法
- 关于 vc编译程序 脱离 vc环境运行的问题 (新手)
- 程序脱离python环境运行
- MFC 程序脱离VC 在任何环境下运行的配置方法
- 让Sqlite脱离VC++ Runtime独立运行
- VC++工程如何脱离VSS环境
- Jar 脱离java环境下运行
- 程序脱离IDE环境运行报错
- MATLAB生成exe脱离matlab运行可执行程序
- MATLAB生成exe脱离matlab运行可执行程序
- MATLAB生成exe脱离matlab运行可执行程序
- Delphi 7.0的access数据库程序脱离编译环境在光盘中运行
- 第一章、MATLAB运行环境
- 深耕IT人
- ajax无刷新投票~~
- C++ notes 1
- C/C++字符串处理(4):std::vector与std::StringBuilder
- VC++与Matlab混合编程之引擎操作详解
- 脱离matlab环境,在VC种运行
- jsp/servlet中 forward, include, reDirect 之间的区别
- 隔世
- vb6提速技巧之一 等长的和非等长的大数组的复制
- 网上代码研究后修改的PHP登录程序,关闭浏览器session清空,可以设置cookies时间
- 最近的二三事
- 微软《SOA in the Real World》笔记03——第一章
- 比尔盖茨:十条“金口玉言”
- VS2005编译问题LINK : E:/aaa/Debug/aaa.exe not found or not built by the last incremental link; performing full link