Невозможно передать указатель BSTR на COM-объект с Python 3.8 - PullRequest
0 голосов
/ 10 июля 2020

В моей программе 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, 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...