Esraa Saady Ответов: 1

Как Я Могу Вызывать Com-Объект Несколько Раз


я хочу вызвать функцию в matlab из c# внутри цикла for с помощью com-компонента
когда я попробовал это сделать у меня было такое исключение

Неверный абонент. (Исключение из HRESULT: 0x80020010 (DISP_E_BADCALLEE))

это и есть код
for (int j = 1; j < 8; j++)
            {               
                object result1;
                string name = path + j + ".JPG";
                matlab.Feval("WBC_SegProposed", 6, out result1, name, 0, j);
           ...........//code
}

исключение было сделано для этой инструкции " matlab.Feval("WBC_SegProposed", 6, из результат1, наименование, 0, Джей);"
что же мне делать ?

Sergey Alexandrovich Kryukov

Нет такого понятия, как "вызов управления". Вы можете вызвать метод или свойство getter/setter, но это не имеет значения, сколько раз...
—СА

Esraa Saady

но это дало мне исключение, почему ?

Sergey Alexandrovich Kryukov

Трудно сказать, исходя из этой информации. Есть ли у вас точный тип исключения, сообщение, стек, а также то же самое для InnerException?
—СА

George Jonsson

Вы получаете эту ошибку в первый раз в цикле?

Esraa Saady

Нет во второй раз в нем

George Jonsson

Я думаю, вам нужно показать весь цикл.
Ошибка, скорее всего, вызвана тем, что вы делаете после кода, который показываете.
Люди на этом форуме нам хороши, но у большинства из нас нет хрустального шара.

Esraa Saady

я не нахожу "редактировать", поэтому я опубликовал новый вопрос с кодом

1 Ответов

Рейтинг:
2

Member 14145676

Привет,
Мне грустно видеть все бесполезные комментарии выше, когда это действительно плохая реализация Mathwork, приводящая к этой ошибке. Решение состоит в том, чтобы просто включить result = null в ваш цикл for:

for (int j = 1; j < 8; j++)
            {               
                object result1 = null; // <---resetting result back to null
                string name = path + j + ".JPG";
                matlab.Feval("WBC_SegProposed", 6, out result1, name, 0, j);
           ...........//code
}


ваш код работает на первой итерации, потому что "результат" по умолчанию имеет значение null. Затем ему присваивается значение в первой итерации, и Feval выдает ошибку из-за передачи ненулевой переменной во второй итерации.


Gerry Schmitz

В C# метод tryparse() не требует из переменной, чтобы быть инициализирован. Предполагать, что Matlab это делает и что любой, кто этого не знает, каким-то образом несовершенен, нелогично.

ОП не сказал, что их проблема исправлена; возможно, "jpg" не был найден и т. д.

И это "локальная" переменная, которая создается на каждой итерации.

Member 14145676

Спасибо за ваш комментарий. Это действительно локальная переменная. Вы правы, что в данном случае это не должно иметь никакого значения. У меня просто была похожая проблема, когда изменение "результатов" с глобальных на локальные исправляло ту же ошибку. Поэтому я удивлен, что Feval не меняет результат на нуль первым делом внутренне, если это все равно вызывает проблему.