C++ Call Matlab error

11 views (last 30 days)
kameranis
kameranis on 31 Dec 2020
Commented: kameranis on 4 Jan 2021
While executing a C++ function called by Matlab I want to report errors back to Matlab. In the C mex API there is mexErrMsgTxt, but I haven't found any corresponding C++ calls. Tried using this helper function
void mxErrorMessage(std::string msg)
{
auto args = factory.createCharArray(msg);
matlabPtr->feval(u"error", args);
}
but I get the following error when I force it to be called
Error using error
Too many output arguments.
Is there a more Matlab appropriate solution that I am missing? Why am I getting this error?
  2 Comments
Rik
Rik on 31 Dec 2020
I have no experience with C++, but the Matlab error sounds like C++ expects the error function to return an output, which it doesn't.
kameranis
kameranis on 31 Dec 2020
That's also how I read it, but looking at the ceval documentation I don't understand how it should be written. The only thing I can imagine is that
matlabPtr->feval(u"error", args);
is an expression and therefore it needs to have a rvalue. This still does not explain how I should be writing this.

Sign in to comment.

Answers (1)

Rik
Rik on 31 Dec 2020
The way I read the documentation page you linked, you need to do this:
// Call function with no output by using void as the type
matlabPtr->feval<void>(u"error", args);
  1 Comment
kameranis
kameranis on 4 Jan 2021
Thank you for pointing this out. In the past few days I have been experimenting with getting this to work but it seems I am still missing something. I changed the data type of args from auto to a proper type, but it stills refuses to work.
void mxErrorMessage(std::string msg)
{
matlab::data::CharArray args = factory.createCharArray(msg.data());
matlabPtr->feval<void>(u"error", args);
}
The errors from mex can be found here.
It seems to be some sort of type mismatch, but I can't figure it out.

Sign in to comment.

Categories

Find more on Write C Functions Callable from MATLAB (MEX Files) in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!