Я пытаюсь прочитать некоторые данные из CST Microwave Studio в MATLAB, используя COM-объекты CST.
Сначала я получил ссылку на COM-объект проекта, выполнив
hApp = actxserver(ProgID);
hProj = hApp.OpenFile(ProjectFile);
.обычно, COM-сервер возвращает сигнатуры всех доступных методов COM-объекта, выполняя
MethSig = invoke(hProj);
. Он хорошо работает, например, в программах MS Office, но ничего не возвращает для CST-COM-объектов ... (что-то связанное с интерфейсом IDispatch, не реализованным в CST?)
В любом случае, можно вызывать методы COM-объекта CST, используя следующий синтаксис (взяв MethodName
и его аргументы из документации CST VBS):
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
Я пытался передать выходные аргументы таким же образом, как в этом вопросе, но безуспешно, всегда получая ошибку:
Error using Interface.CSTStudio_Application.Active3D/invoke
Error: Type mismatch, argument 2
IsЕсть ли способ получить все выходные переменные из COM-объекта в этом случае?Возможно, какая-то Java-оболочка?
Спасибо.