Calling Matlab from C++: How to pass in no arguments in varargin?

5 ビュー (過去 30 日間)
matal
matal 2013 年 5 月 30 日
I am compiling Matlab .m functions using Matlab compiler into libraries callable from C++. The particular function I am working with looks like this:
function status = cainit( model, varargin )
if nargin==1
% do something
elseif nargin==2
% do something else
end
end
The C++ header file produced by Matlab compiler ("mcc") looks contains:
extern LIB_libca_CPP_API void MW_CALL_CONV cainit( int nargout, mwArray& status, const mwArray& model, const mwArray& varargin );
I want to call cainit from my C++ code such that the nargin==1 part of the Matlab function gets executed. But I can't figure out how to pass in "no arguments".
For example, if I try the most obvious:
mwArray status;
cainit( 1, status, mwArray(""), mwArray() );
It still results in nargin==2 because mwArray() is an empty ([]) array.
Is there a way not to pass in an argument from C++? In other words, how do I do the C++ equivalent of Matlab "cainit('mymodel')"?
Thanks in advance!

採用された回答

matal
matal 2013 年 5 月 31 日
Looks like this is not possible:
"Caution The C++ shared library interface does not support varargin with zero (0) input arguments. Calling your program using an empty mwArray results in the compiled library receiving an empty array with nargin = 1. The C shared library interface allows you to call mlfFOO(NULL) (the compiled MATLAB code interprets this as nargin=0). However, calling FOO((mwArray)NULL) with the C++ shared library interface causes the compiled MATLAB code to see an empty array as the first input and interprets nargin=1."

その他の回答 (1 件)

Kaustubha Govind
Kaustubha Govind 2013 年 5 月 31 日
I don't have a whole lot of experience with MATLAB Compiler, but does it work if you create varargin as an empty cell array and pass that in:
mwArray varargin(0, 0, mxCELL_CLASS);

カテゴリ

Help Center および File ExchangeDeploy to C++ Applications Using mwArray API (C++03) についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by