COM-объект Matlab, Ошибка при передаче массива в качестве ввода - PullRequest
0 голосов
/ 01 апреля 2020

У меня были проблемы с интерфейсом Matlab с COM-объектом. Я создал COM-объект так:

myobj = actxserver('Example_ProgID')  
% where 'Example_ProgID is what is registered in the Windows Registry

Проблем пока нет. Однако мне нужно было вызвать метод (т.е. функцию) этого объекта и передать ему целочисленный массив в качестве входного параметра, например так:

x = [2,7,5]; y = myobj.myfunc(x);

Однако я получил следующие ошибки

Error: Type mismatch, argument 
Error: The parameter is incorrect

Чтобы исправить ошибку несоответствия типов, я сделал массив int32

x = int32(x);

Вторая ошибка была более трудной для отладки. Оказывается, я должен был сделать еще две вещи. Сначала мне нужно было включить один из dim safe массивов, например, так:

feature('COM_SafeArraySingleDim', 1)

Затем я понял, что COM-объекты должны передаваться "Векторы столбцов", а не "Векторы строк".
Как только я изменил x из [ 2,5,7] до [2; 5; 7], тогда у меня все заработало без ошибок. (обратите внимание, что вы могли также преобразовать вектор строки в вектор столбца, выполнив x = x. ')

Просто опубликуйте это для любого, кто столкнется с этой проблемой в будущем. COM - это очень старая технология, и найти информацию о ней очень сложно.

Ссылки:

https://www.mathworks.com/matlabcentral/answers/92424-how-can-i-pass-arguments-to-an-activex-server-from-matlab-7-0-r14-as-one-dimensional-arrays

https://www.mathworks.com/help/matlab/matlab_external/handling-com-data-in-matlab-software.html#brc5jeu -1

https://www.mathworks.com/matlabcentral/answers/94888-how-can-i-pass-arguments-by-reference-to-an-activex-server-from-matlab-7-0-r14

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