BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / matlab / #4200同步于 2008/9/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖

[求助]【求助】关于matlab的mexFunction函数。

Shmily1314
2008/9/23镜像同步1 回复
RT. 代码如下,文件名为main.cpp: #include "stdafx.h" #include "wave.h" #include "mex.h" #define WAVE_IN_START 1 #define WAVE_IN_STOP 2 #define WAVE_GET_DATA 3 #define WAVE_GET_E 4 #define WAVE_GET_Z 5 void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { double *ret = NULL; int cmd; int len; if (nrhs < 1 || nrhs > 5 || !mxIsNumeric(prhs[0])) { mexErrMsgTxt("命令格式错误&iexcl;"); } else if (nlhs > 1) { mexErrMsgTxt("输出参数数目过多&iexcl;"); } cmd = (int) *mxGetPr(prhs[0]); switch (cmd) { case WAVE_IN_START: wave_start(); break; case WAVE_IN_STOP: wave_stop(); break; case WAVE_GET_DATA: len = wave_get_len(); if (len == 0) { mexWarnMsgTxt("len = 0"); break; } plhs[0] = mxCreateDoubleMatrix(len, 1, mxREAL); ret = mxGetPr(plhs[0]); wave_get_data(ret); break; case WAVE_GET_Z: len = wave_get_frames(); if (len == 0) { break; } plhs[0] = mxCreateDoubleMatrix(len, 1, mxREAL); ret = mxGetPr(plhs[0]); wave_get_zcr(ret); break; case WAVE_GET_E: len = wave_get_frames(); if (len == 0) { break; } plhs[0] = mxCreateDoubleMatrix(len, 1, mxREAL); ret = mxGetPr(plhs[0]); wave_get_energy(ret); break; default: break; } } 问题是,用VC编译好了MatWave.dll之后,在matlab命令行里输入 x = MatWave(3); 此时会报错:??? one or more output argumens not assigned during call to "MatWave". 但是在命令行里输入: MatWave(3); 就通过了。 我找了好久,也看不出门道。 各位大大帮忙看下吧,有点着急@@。 拜谢。
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
Shmily1314机器人#1 · 2008/9/24
已搞定,结贴。