C 访问存储在mxArray中的对象的字符串属性
我喜欢使用C 访问存储在mxArray中的对象的字符串属性,c,matlab,mex,C,Matlab,Mex,我喜欢使用mexEvalString,因为它很容易在mex中执行。但是,我得到了一些命令的异常,因此我想使用mexEvalStringWithTrap捕获它们以查看发生了什么,但是我无法从异常中获取字符串 基本上,它只是从一个对象中获取一个字符串,所以我找到了mxGetProperty和mxGetString,但这段代码仍然不起作用。输出为标识符:(空) mxGetN返回37,但是str似乎有问题(可能是mxGetString的用法有缺陷) 在调用mxGetString之前,您需要分配str(尽
mexEvalString
,因为它很容易在mex中执行。但是,我得到了一些命令的异常,因此我想使用mexEvalStringWithTrap
捕获它们以查看发生了什么,但是我无法从异常中获取字符串
基本上,它只是从一个对象中获取一个字符串,所以我找到了mxGetProperty
和mxGetString
,但这段代码仍然不起作用。输出为标识符:(空)
mxGetN
返回37
,但是str
似乎有问题(可能是mxGetString
的用法有缺陷)
在调用
mxGetString
之前,您需要分配str
(尽管使用mxArrayToString
可能更容易,请参见底部)
testMEXException.cpp
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
mxArray *except, *char_ident;
mwSize strlen;
char *str;
// catch exception
except = mexEvalStringWithTrap("unknownfunction");
// get identifier string
char_ident = mxGetProperty(except, 0, "identifier");
strlen = (mwSize)mxGetN(char_ident);
size_t buflen = strlen*sizeof(mxChar) + 1;
str = (char*)mxMalloc(buflen); // ALLOCATE
mxGetString(char_ident, str, strlen + 1);
// print identifier string
printf("identifier: %s\n", str);
mexEvalStringWithTrap("drawnow");
// get message string
char_ident = mxGetProperty(except, 0, "message");
strlen = (mwSize)mxGetN(char_ident);
buflen = strlen*sizeof(mxChar) + 1;
str = (char*)mxRealloc(str, buflen); // REALLOCATE
mxGetString(char_ident, str, strlen + 1);
// print message string
printf("message: %s\n", str);
mexEvalStringWithTrap("drawnow");
mxFree(str); // FREE
}
输出
>> testMEXException
identifier: MATLAB:UndefinedFunction
message: Undefined function or variable 'unknownfunction'.
或者,使用mxArrayToString
,这会在内部为输入mxArray
中包含的整个字符串分配足够的空间,但仍需要释放它:
str = mxArrayToString(char_ident);
// use str ...
mxFree(str);
捕获MException
对象和访问标识符
属性的代码很好
str = mxArrayToString(char_ident);
// use str ...
mxFree(str);