Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 19, 2018 06:41:12

Danil_lll
Зарегистрирован: 2018-09-19
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Возврат 3-х и более переменных из функции

Всем доброго времени суток.
Есть COM-библиотека, которую вызываю в Python через: win32com.client. Сама COM-библиотека написана на С++. Т.е. в ней есть такие функци, которые могут возвращать 2 и более переменных.
Вот например функция, в которую отправим 6 параметров, 3 из которых вернутся с новым значением:

 STDMETHODIMP Hybrid::Verify(BSTR alias, BSTR inData, BSTR inSign, BSTR* outData, BSTR* outVerifyInfo, BSTR* outCert)
{
    ..............................................
    return S_OK;
}

Когда же на выход был один параметр:
 STDMETHODIMP Hybrid::GetLastError(ULONG* rv)
{
    .......................................
    return S_OK;
}
на Python-е я использовал простое присваивание:

 err = Hybrid.GetLastError()


А вот как получить с таких функций сразу 2,3,4 и более параметров?

Пробовал вот так! Не работает…
 outData, outVerifyInfo, outCert  = Hybrid.Verify(" ", inD, inS)

p.s. Стоит Python 3.7

Офлайн

#2 Сен. 19, 2018 07:29:03

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

Возврат 3-х и более переменных из функции

Попробуй вызвать aa = Hybrid.Verify(“ ”, inD, inS, outData, outVerifyInfo, outCert) и посмотри содержимое переменных aa, outData, outVerifyInfo, outCert после отработки функции. Если не ошибаюсь, то BSTR* означает, что передача параметра идёт по ссылке, т.е. передаётся ссылка на объект (указатель). Изменение такой переменной внутри функции приводит к изменению содержимого “внешней” (“глобальной”) переменной. Это как global внутри функции.

Отредактировано Rafik (Сен. 19, 2018 07:37:36)

Офлайн

#3 Сен. 19, 2018 07:34:46

Danil_lll
Зарегистрирован: 2018-09-19
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Возврат 3-х и более переменных из функции

Rafik
Попробуй вызвать aa = Hybrid.Verify(“ ”, inD, inS, outData, outVerifyInfo, outCert) и посмотри содержимое переменных aa, outData, outVerifyInfo, outCert после отработки функции.
Ничего… Ошибка.
Форму выбивает

Офлайн

#4 Сен. 19, 2018 07:45:38

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

Возврат 3-х и более переменных из функции

Сделай print содержимого переменных outData, outVerifyInfo, outCert до и после функции. Поставь точку останова после print-ов, стоящих за функцией. Если значения меняются, то с функцией всё норм. Ищи ошибку далее. Если падает на вызове функции, прошерсти саму функцию (если доступны исходники) или доки на саму функцию (если нет исходников).

Офлайн

#5 Сен. 19, 2018 07:59:06

Danil_lll
Зарегистрирован: 2018-09-19
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Возврат 3-х и более переменных из функции

Rafik
Сделай print содержимого переменных outData, outVerifyInfo, outCert до и после функции. Поставь точку останова после print-ов, стоящих за функцией.
Делаю вот так
  outData = ""
outVerifyInfo = ""
outCert = ""
try:
      x = HybridVerify("", inD, inS,outData, outVerifyInfo, outCert)
except:
      print(x,outData, outVerifyInfo,outCert)
Выдает ошибку… Не доходит до принта…

Если делать вот так:
  try:
     HybridVerify("", inD, inS,outData, outVerifyInfo, outCert)
except:
      print(outData, outVerifyInfo,outCert)
То просто выводит пустые строки.

Офлайн

#6 Сен. 19, 2018 08:08:20

Danil_lll
Зарегистрирован: 2018-09-19
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Возврат 3-х и более переменных из функции

Если падает на вызове функции, прошерсти саму функцию (если доступны исходники) или доки на саму функцию (если нет исходников).
Шерстить саму функцию нет смысла… Она рабочая(Уже написал интерфейсы для этой библиотеки на C#, GoLang, PHP)…
Поэтоу здесь только вопрос в том, как возвращать несколько значений без RETURN…

Офлайн

#7 Сен. 19, 2018 08:10:20

Danil_lll
Зарегистрирован: 2018-09-19
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Возврат 3-х и более переменных из функции

Разобрался…. Спасибо)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version