Octave中如何调用返回多值的COM接口函数?
Octave调用带多out参数的COM对象方法解决方案
Octave的COM接口(依赖windows包)对out参数的处理逻辑和Matlab不同,无法直接通过[a,b,c] = foo.BeatArray的形式解构多返回值,需要通过显式创建OleVariant容器来接收输出,具体步骤如下:
加载windows包并初始化COM对象
pkg load windows foo = actxserver('MyComObject.ProgID'); % 替换为你的COM对象实际ProgID创建用于接收输出的OleVariant变量
提前创建空的OleVariant实例,作为out参数的载体:EventTimes = olevariant(); BeatTypes = olevariant(); TemplateNumbers = olevariant();调用BeatArray方法传递out参数
将创建好的OleVariant变量作为参数传入方法,COM会自动填充数据到这些变量中:foo.BeatArray(EventTimes, BeatTypes, TemplateNumbers);转换为Octave可用的数组类型
最后把OleVariant中的数据转换为Octave原生的double数组:a = double(EventTimes); b = double(BeatTypes); c = double(TemplateNumbers);
核心原因是Octave的actxserver并未实现Matlab那样的out参数自动映射为返回值的逻辑,必须通过引用传递的OleVariant容器来接收COM方法输出的数据。
内容的提问来源于stack exchange,提问作者ralfiii
相关产品推荐
相关产品推荐

