Получить несколько выходов из COM-объекта в MATLAB - PullRequest
5 голосов
/ 01 апреля 2019

Я пытаюсь прочитать некоторые данные из 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-оболочка?

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...