В моей программе Python я пытаюсь выполнить вызов специального COM-объекта, написанного на C ++. Функция, которую я пытаюсь вызвать, построена следующим образом:
void foo(
BSTR *pbstrParameters,
BSTR *pbtrResult
);
Насколько я понимаю, Python преобразует строки Unicode в варианты BSTR при переходе к COM-объектам. Отлично! Это то, чего ожидает моя функция. Теоретически у меня должен получиться такой вызов:
COMobject.foo("string1","string2")
Но это приводит к ошибке несоответствия типов: pywintypes.com_error: (-2147352571, 'Type mismatch.', None, 1)
Затем я попытался передать ему фактические BSTR из comtypes:
COMobject.foo(comtypes.BSTR("string1"),comtypes.BSTR("string2"))
, но это также привело к несоответствию типов.
Наконец, я попытался передать указатели на BSTR, как определено в словаре comtypes _ctype_to_vartype
.
COMobject.foo(POINTER(BSTR),POINTER(BSTR))
Что приводит к ошибке: TypeError: Objects of type '_ctypes.PyCPointerType' can not be converted to a COM VARIANT
Если я не могу преобразовать POINTER(BSTR)
в вариант COM, то что это за строка в _ctype_to_vartype
dict comtypes в автоматизации .py для?:
POINTER(BSTR): VT_BYREF|VT_BSTR,