У меня есть нишевая программа (предназначенная для небольшой отрасли 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.
Это говорит, что передача по ссылке может быть выполнена с использованием нескольких выходных переменных, но я все еще получаю несоответствие типов или пропущенные параметры параметра.
Кто-нибудь сталкивался с подобной проблемой? Есть ли способ получить дополнительную информацию о том, какой именно тип необходим при возвращении ошибки несоответствия типов?