我正在尝试使用CST的COM对象从MATLAB中的CST Microwave Studio读取一些数据。
首先,我通过执行得到项目COM对象的引用
hApp = actxserver(ProgID);
hProj = hApp.OpenFile(ProjectFile);
此时,通常COM服务器通过执行
返回COM对象的所有可用方法的签名。MethSig = invoke(hProj);
在例如MS Office程序,但对CST COM对象什么也不返回...(这与Cis中未实现的IDispatch接口有关吗?)
无论如何,可以使用以下语法(从CST VBS文档中获取MethodName
及其参数)来调用CST COM对象的方法:
Out1 = hProj.invoke(MethodName, In1, In2, ...)
但是,某些方法会返回多个输出参数,例如(同样,来自CST VBS文档):
GetParameterCombination( string resultID, variant parameterNames, variant parameterValues ) bool
其中resultID
是输入参数,parameterNames
和parameterValues
是输出参数。
在这种情况下,在其他支持COM的应用程序(例如MS Office)中,MATLAB负责输出参数的拆分,并且以下语法将起作用:
[Out1, Out2, ...] = hWorkSheet.invoke(MethodName, In1, In2, ...);
% or even using dot-notation:
[Out1, Out2, ...] = hWorkSheet.MethodName(In1, In2, ...);
但是,它不适用于CST:
[RetVal, parameterNames, parameterValues] = hProj.invoke('GetParameterCombination', '3D:RunID:1');
Error using Interface.CSTStudio_Application.Active3D/invoke
Error: Missing a required parameter
我试图以与this问题类似的方式传递输出参数,但是没有成功,总是出现错误:
Error using Interface.CSTStudio_Application.Active3D/invoke
Error: Type mismatch, argument 2
在这种情况下,有什么方法可以从COM对象获取所有输出变量吗? 也许是某种Java包装器?
谢谢。