return empty array in c++ mexFunction in the out-of-process mexHost

6 次查看(过去 30 天)
I want to use the out-of-process functionnality and to return an empty array in my C++ mexFunction.
It is not exactly the same question as :
since it is in C++ and with feval.
Here the problem:
void MexFunction::operator()(mm::ArgumentList outputs, mm::ArgumentList inputs)
{
outputs[0] = f.createEmptyArray();
}
that i called with
>> mh = mexhost; res = feval(mh,'example');
Error using matlab.mex.MexHost/feval
Too many output arguments.
but directly called via the Command window I have:
>> example
ans =
[]

回答(1 个)

Samay Sagar
Samay Sagar 2024-9-26
I have also encountered this issue in the past while returning an empty array from a C++ MEX function. I have verified that this issue was fixed in MATLAB R2021a.
As a workaround, you can return a non-empty value like a string literal (say "empty_array") instead of an empty array, which can be later handled in MATLAB to replace the value with [ ].
Another workaround is to catch the error in MATLAB and handle it there to use [ ].
mh = matlab.mex.MexHost();
try
res = feval(mh, "example");
catch ME
switch ME.identifier
case 'MATLAB:maxlhs' % The error when empty array is returned
res = [];
case 'MATLAB:mex:MexHostCrashed' % A general MEX error
clear mex;
otherwise
rethrow(ME)
end
end

类别

Help CenterFile Exchange 中查找有关 MATLAB Compiler SDK 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by