Jun-26-2024, 01:27 PM
Working on Microsoft Windows [Version 10.0.19045.4412], Python 3.8.10 (I need to compile my script for Windows 7 as well...), comtypes 1.4.4
I am interacting with a Windows application through comtypes
Now, I have a method that asks for String array as an argument, defined as follows (inside its owner's class _methods_ list, of course)
I am interacting with a Windows application through comtypes
import comtypes.client import numpy as np from comtypes.automation import VARIANT comtypes.client.GetModule('path\to\application.exe') from comtypes.gen import Application as App comtypes.npsupport.enable() MyApp = comtypes.client.CreateObject('CLSID', interface=App.IDualApplication)and everything is working smooth: I found methods that asks for Variant (two-element array of double with array lower bound = 0 and array upper bound = 1) as an argument, defined as follows (inside its owner's class _methods_ list, of course)COMMETHOD( [dispid(id), helpstring('Perform this action')], HRESULT, 'ThisMethod', (['in'], VARIANT, 'dValues'), )I managed to deal with them withMyApp.ThisMethod(VARIANT(np.array([x, y], dtype='float')))Sweet!
Now, I have a method that asks for String array as an argument, defined as follows (inside its owner's class _methods_ list, of course)
COMMETHOD( [dispid(id), helpstring('Perform that action.')], HRESULT, 'ThatMethod', (['in', 'optional'], VARIANT, 'strArrayItems'), )Here's how I tried to deal with it, with the results I got:MyApp.ThatMethod(['x', 'y'])
Error:Traceback (most recent call last): MyApp.ThatMethod(['x', 'y']) File "\venv\lib\site-packages\comtypes\automation.py", line 568, in __ctypes_from_outparam__ result = self.value File "\venv\lib\site-packages\comtypes\automation.py", line 520, in _get_value typ = _vartype_to_ctype[self.vt & ~VT_ARRAY] KeyError: 9MyApp.ThatMethod(VARIANT(np.array(['x', 'y'], dtype='str')))
Error:Traceback (most recent call last): MyApp.ThatMethod(['x', 'y']) File "\venv\lib\site-packages\comtypes\automation.py", line 215, in __init__ self.value = args[0] File "\venv\lib\site-packages\comtypes\automation.py", line 344, in _set_value obj = _midlSAFEARRAY(VARIANT).create(value) File "\venv\lib\site-packages\comtypes\safearray.py", line 122, in create return cls.create_from_ndarray(value, extra) File "\venv\lib\site-packages\comtypes\safearray.py", line 165, in create_from_ndarray value = _ndarray_to_variant_array(value) File "\venv\lib\site-packages\comtypes\safearray.py", line 386, in _ndarray_to_variant_array if comtypes.npsupport.interop.VARIANT_dtype is None: AttributeError: 'Interop' object has no attribute 'interop'variant = VARIANT(VT_ARRAY | VT_BSTR) variant.value = ['x', 'y'] MyApp.ThatMethod(variant)
Error:Traceback (most recent call last): MyApp.ThatMethod(variant) File "\venv\lib\site-packages\comtypes\automation.py", line 568, in __ctypes_from_outparam__ result = self.value File "\venv\lib\site-packages\comtypes\automation.py", line 520, in _get_value typ = _vartype_to_ctype[self.vt & ~VT_ARRAY] KeyError: 9variant = VARIANT(VT_ARRAY | VT_BSTR) variant.value = np.array(['x', 'y'], dtype='str') MyApp.ThatMethod(variant)
Error:Traceback (most recent call last): variant.value = np.array(['x', 'y'], dtype='str') File "\venv\lib\site-packages\comtypes\automation.py", line 344, in _set_value obj = _midlSAFEARRAY(VARIANT).create(value) File "\venv\lib\site-packages\comtypes\safearray.py", line 122, in create return cls.create_from_ndarray(value, extra) File "\venv\lib\site-packages\comtypes\safearray.py", line 165, in create_from_ndarray value = _ndarray_to_variant_array(value) File "\venv\lib\site-packages\comtypes\safearray.py", line 386, in _ndarray_to_variant_array if comtypes.npsupport.interop.VARIANT_dtype is None: AttributeError: 'Interop' object has no attribute 'interop'How can I provide this COM method with a String array? 