Форум сайта python.su
Всем доброго времени суток.
Есть 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; }
err = Hybrid.GetLastError()
outData, outVerifyInfo, outCert = Hybrid.Verify(" ", inD, inS)
Офлайн
Попробуй вызвать aa = Hybrid.Verify(“ ”, inD, inS, outData, outVerifyInfo, outCert) и посмотри содержимое переменных aa, outData, outVerifyInfo, outCert после отработки функции. Если не ошибаюсь, то BSTR* означает, что передача параметра идёт по ссылке, т.е. передаётся ссылка на объект (указатель). Изменение такой переменной внутри функции приводит к изменению содержимого “внешней” (“глобальной”) переменной. Это как global внутри функции.
Отредактировано Rafik (Сен. 19, 2018 07:37:36)
Офлайн
RafikНичего… Ошибка.
Попробуй вызвать aa = Hybrid.Verify(“ ”, inD, inS, outData, outVerifyInfo, outCert) и посмотри содержимое переменных aa, outData, outVerifyInfo, outCert после отработки функции.
Офлайн
Сделай print содержимого переменных outData, outVerifyInfo, outCert до и после функции. Поставь точку останова после print-ов, стоящих за функцией. Если значения меняются, то с функцией всё норм. Ищи ошибку далее. Если падает на вызове функции, прошерсти саму функцию (если доступны исходники) или доки на саму функцию (если нет исходников).
Офлайн
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)
Офлайн
Если падает на вызове функции, прошерсти саму функцию (если доступны исходники) или доки на саму функцию (если нет исходников).Шерстить саму функцию нет смысла… Она рабочая(Уже написал интерфейсы для этой библиотеки на C#, GoLang, PHP)…
Офлайн
Разобрался…. Спасибо)
Офлайн