Получение возвращаемого значения COM-объекта, который использует передачу по ссылке - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть нишевая программа (предназначенная для небольшой отрасли c), в которой есть COM-сервер для взаимодействия с ней. Этот COM-сервер работает нормально при вызове из VBA, но я не смог заставить его работать с MATLAB или Python. Любая функция, которая возвращает значение, просто выдает ошибку, но я все еще могу использовать методы, которые ничего не передают, например, загрузить файл.

Я думаю, что проблема в том, что все методы требуют передачи ссылка. Вместо этого все методы передают обратно номер ошибки в качестве вывода для каждого метода (0, если ошибки нет, в противном случае - какое-либо значение). Например, в VBA вы можете использовать метод err = GetFileName(fileName). Переменная fileName может быть пустой, но после вызова метода ей присваивается имя файла, а err содержит номер ошибки.

Когда я пытаюсь вызвать любой метод, который дополнительно что-то возвращает обратно с номером ошибки в MATLAB или Python, я получаю несоответствие типов или пропущенный параметр ошибки Error: Type mismatch, argument 1. Функция methodview в MATLAB вернула методы, приведенные ниже. Я не очень понимаю, что такое тип массива MATLAB, потому что передача пустого массива все равно дает ошибку.

Вот пример того, как я пытаюсь это сделать:

api = actxserver('ProgID')
ans = invoke(api,"methodname")
% this will give a missing parameter error
ans = invoke(api,"methodname",[])
% this will give a mismatch error for input 1 (the empty array)
[ans ans2] = invoke(api,"methodname",[])
% also a mismatch error for input 1
[ans ans2] = invoke(api,"methodname")
% missing parameter error

Это ничего не меняет, я делаю пустой массив переменной или пытаюсь создать дескриптор функции, который просто возвращает значение .

f = @(a) a

Я пытался это , но он говорит, что MWObjectArray не существует.

coder.ref , кажется, только для C ++ stuff.

Похоже, что не имеет типа данных массива MATLAB.

Это говорит, что передача по ссылке может быть выполнена с использованием нескольких выходных переменных, но я все еще получаю несоответствие типов или пропущенные параметры параметра.

Кто-нибудь сталкивался с подобной проблемой? Есть ли способ получить дополнительную информацию о том, какой именно тип необходим при возвращении ошибки несоответствия типов?

MATLABmethodview

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