Esraa Saady Ответов: 1

Как использовать feval matlab в c#


я создаю функцию в matlab под названием segment, и я хочу вызвать ее из программы c#
он принимает 2 аргумента "строка и целое число"
и он возвращает 6 массивов
это мой код. :
var activationContext = Type.GetTypeFromProgID("matlab.application.single");
var matlab = (MLApp.MLApp)Activator.CreateInstance(activationContext);
matlab.Visible = 0;
string name = Openfile.FileName;
int num = 0;
var result = matlab.Feval("WBC_SegProposed", 6, name,num);


но это дает мне ошибку при последней инструкции, то есть ошибку
Ошибка 1 Лучшие перегруженный метод матч за 'MLApp.DIMLApp.Feval(строка, int и объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта, объекта)' имеет некоторые недопустимые аргументы


даже эта инструкция дает мне ошибку
Матлаб.Феваль("strcat", 1, "hello", "world")
что же мне делать ?

1 Ответов

Рейтинг:
6

Matt T Heffron

Этот выглядит как оболочка c# вокруг COM - интерфейса-это нет возвращая результат как обычное возвращаемое значение, скорее он возвращает его через out параметр. Таким образом, ваш код будет выглядеть следующим образом:

object result;
matlab.Feval("WBC_SegProposed", 6, out result, name, num);

Если дополнительные аргументы не были "дефолтными", то вам понадобится соответствующее количество null значения для завершения списка аргументов.

Отказ от ответственности: я использовал Matlab в прошлом, но в настоящее время у меня нет копии, поэтому я не могу попробовать это. Это мой наилучшее предположение.


Esraa Saady

Большое спасибо!...ошибка исчезла :)

Esraa Saady

у вас есть какие-нибудь идеи, как я могу получить много выходных параметров от функции в c# ??

Matt T Heffron

Как я уже сказал, У меня нет установленного Matlab, и я никогда не использовал COM-интерфейс. Так что я не уверен.
Возвращает ли результирующий объект одно значение или это массив (COM SAFEARRAY) всех возвращаемых значений?
Всего лишь мысль.

Esraa Saady

спасибо, что ответили мне :) .. это работает знаю