为什么MATLAB编码器即使在I';ve设置DataTypeReplacement=';CBuiltIn';?

为什么MATLAB编码器即使在I';ve设置DataTypeReplacement=';CBuiltIn';?,c,matlab,matlab-coder,C,Matlab,Matlab Coder,我有一个MATLAB(R2020b)函数,我正在尝试使用MATLAB编码器将其转换为(与Linux兼容的)C程序。该函数接受3个字符串参数,如下所示: function func1(a, b, c) 我希望生成的C函数接受3个char*参数: extern void func1(const char *a, const char *b, const char *c); 要完成此操作,我将通过以下脚本运行MATLAB编码器: cfg = coder.config('dll','ecoder',

我有一个MATLAB(R2020b)函数,我正在尝试使用MATLAB编码器将其转换为(与Linux兼容的)C程序。该函数接受3个字符串参数,如下所示:

function func1(a, b, c)
我希望生成的C函数接受3个
char*
参数:

extern void func1(const char *a, const char *b, const char *c);
要完成此操作,我将通过以下脚本运行MATLAB编码器:

cfg = coder.config('dll','ecoder',false);
cfg.GenerateReport = true;
cfg.ReportPotentialDifferences = false;
cfg.GenerateComments = false;
cfg.RuntimeChecks = true;
cfg.GenCodeOnly = true;
cfg.HardwareImplementation.TargetHWDeviceType='Generic->64-bit Embedded Processor (LP64)';
cfg.DataTypeReplacement = 'CBuiltIn';

%% Define argument types for entry-point 'func1'.
ARGS = cell(1,1);
ARGS{1} = cell(3,1);
ARGS{1}{1} = coder.typeof('X',[Inf Inf],[1 1]);
ARGS{1}{2} = coder.typeof('X',[Inf Inf],[1 1]);
ARGS{1}{3} = coder.typeof('X',[Inf Inf],[1 1]);

%% Invoke MATLAB Coder.
codegen  -config cfg func1 -args ARGS{1} -c
运行脚本后,生成的函数签名为:

extern void func1(const emxArray_char_T *a, const emxArray_char_T *b, const emxArray_char_T *c);
看起来,尽管我显式地设置了
cfg.DataTypeReplacement='CBuiltIn'
,MATLAB编码器还是生成了MathWorks typedef,而不是


我的问题是——为什么?我如何解决这个问题以生成内置数据类型?

很遗憾,从MATLAB编码器R2021a开始,不支持生成以char*表示可变大小字符串的代码。目前,Matlab编码器总是生成代码,它使用EMxRayay-CalaseT*(C代码生成)或编码器::使用可变大小的字符串:数组(默认为C++代码生成)。目前,Matlab编码器总是生成代码,它使用EMxRayay-CalaseT*(C代码生成)或编码器::使用可变大小的字符串时,数组(默认为C++代码生成)。