Any ideas? On Tue, Jan 28, 2020 at 1:06 PM Terry Davis <terry.y.da...@gmail.com> wrote:
> Update 2: After discovering the `pythoncom.GetRecordFromGuids` and > `.GetRecordFromTypeInfo` (with the comment: "This function will fail if the > specified type info does not have a guid defined"). > > I found that the Record types don't appear to have a GUID. > lib_pyITypelib.GetDocumentation(4) = ('SoftwareInfo', None, 0, None) > lib_pyITypelib.GetTypeInfo(4).GetTypeAttr().iid > = IID('{00000000-0000-0000-0000-000000000000}') > > So, is it possible to create a Record object without a GUID? > (Assuming that passing a Record object `ccs.GetSoftwareInfo(info=<some > Record Object>)` is the correct approach here.) > > I also tried assigning a `pythoncom.CreateGuid() to the `iid` attribute > above, but `GetRecordFromGuids` failed with `pywintypes.com_error: > (-2147319765, 'Element not found.', None, None)`. So I assume the GUID > assignment didn't make it outside of python into COM-space. > > P.S. > I also found this old thread: > > https://grokbase.com/t/python/python-win32/0821b2n4e5/how-to-create-a-com-record > which appears to be related to my problem, but no solutions were > identified. > (I tried the `DumbDispatch` solution; it didn't work). > > > On Mon, Jan 27, 2020 at 4:31 PM Terry Davis <terry.y.da...@gmail.com> > wrote: > >> Update: The functions that don't work return Record types, and the ones >> that do work just return multiple values (a tuple). >> Do I need to pass in the appropriate Record type (or an empty record) >> during each function call? >> If so, how do I get to the Record types that I see in the python object >> browser (python -m win32com.client.combrowse)? >> >> Thanks, >> Terry >> >> On Mon, Jan 27, 2020 at 3:33 PM Terry Davis <terry.y.da...@gmail.com> >> wrote: >> >>> Hi all, >>> >>> I tried searching the mailing list archives for "com_record" but didn't >>> find anything relevant. >>> >>> For context, I'm trying to access a COM interface defined in a .tlb file. >>> >>> Here's a skeleton of the script I'm using to expose this interface: >>> import pythoncom >>> from win32com.client import gencache >>> >>> lib_GUID = "{<GUID>}" >>> lib_major = 1 >>> lib_minor = 0 >>> lib_pyITypelib = pythoncom.LoadRegTypeLib(lib_GUID, lib_major, lib_minor) >>> lib = gencache.EnsureModuleForTypelibInterface(_lib_pyITypelib) >>> >>> ccs = lib.CControlServer() # CControlServer is a CoClass >>> eid, *other = ccs.LoadExperiment(**path to file**) # Works >>> ccs.GetSoftwareInfo() # Fails with exception below. >>> ccs.GetSolvent(eid) # also fails >>> >>> I can't dig down in the debugger to find the source of the exception, so >>> I'm hoping someone here can help! >>> >>> >>> Exception: >>> >>> def GetSoftwareInfo(self, info=pythoncom.Missing): >>> >>> >>> <ipython-input-8-7304ad54d54a> in <module> >>> ----> 1 ccs.GetSoftwareInfo() >>> >>> ~\AppData\Local\Temp\gen_py\3.7\<GUID>x0x1x0.py in GetSoftwareInfo(self, >>> info) >>> 279 def GetSoftwareInfo(self, info=pythoncom.Missing): >>> 280 'method GetSoftwareInfo' >>> --> 281 return self._ApplyTypes_(13, 1, (24, 0), ((36, >>> 2),), 'GetSoftwareInfo', None,info >>> 282 ) >>> 283 >>> >>> C:\Python37\lib\site-packages\win32com\client\__init__.py in >>> _ApplyTypes_(self, dispid, wFlags, retType, argTypes, user, resultCLSID, >>> *args) >>> 465 def _ApplyTypes_(self, dispid, wFlags, retType, >>> argTypes, user, resultCLSID, *args): >>> 466 return self._get_good_object_( >>> --> 467 self._oleobj_.InvokeTypes(dispid, 0, >>> wFlags, retType, argTypes, *args), >>> 468 user, resultCLSID) >>> 469 >>> >>> TypeError: Only com_record objects can be used as records >>> >>
_______________________________________________ python-win32 mailing list python-win32@python.org https://mail.python.org/mailman/listinfo/python-win32