Re: [ctypes-users] more readtlb.py surprises
Brought to you by:
theller
From: Thomas H. <th...@py...> - 2003-05-28 07:04:00
|
Some of these problems are fixed in the version I sent you, others must be fixed manually: > Still trundling through editing the generated interface to > ESRICore.olb, and came across another couple of oddities... > Not sure whether you've dealt with these yet:- > > 1. POINTER(HRESULT) -> complains that HRESULT is not a class > > generated class: > ---------------- > IDatasetEditEx._methods_ = IUnknown._methods_ + [ > (STDMETHOD(HRESULT, "IsBeingEdited", POINTER(c_int), POINTER(HRESULT))), > ] > > last couple of lines of traceback: > ---------------------------------- > File "C:\Temp\dev\new_area_mgt\ESRICore.py", line 22423, in ? > IDatasetEditEx._methods_ = IUnknown._methods_ + [ > File "C:\PROGRA~1\Python22\Lib\site-packages\ctypes\__init__.py", line > 189, in POINTER > {'_type_': cls}) > exceptions.TypeError: _type_ must be a type > > To fudge my way forward, I've substituted c_void_p for POINTER(HRESULT). > HRESULT is currently a function, not a ctypes data type, it is used to check for errors in dll-function or COM method calls. It can only be used as the restype attribute, not in the parameter list. One fix would be to replace POINTER(HRESULT) with POINTER(c_int), for example. Personally I've not (yet) encountered an interface where HRESULT values are received as byref parameters. > > 2. POINTER(None) is generated for a void* reference Fixed in the version I sent you. > > 3. related to #1, but encountered in c:\winnt\system32\msxml3.dll, > because ESRICore has references to IXMLDOMElement (I had to create a > DOMNodeType = tagDOMNodeType alias too). > > class def: > ---------- > ISAXErrorHandler._methods_ = IUnknown._methods_ + [ > (STDMETHOD(HRESULT, "error", POINTER(ISAXLocator), POINTER(c_ushort), > HRESULT)), > (STDMETHOD(HRESULT, "fatalError", POINTER(ISAXLocator), > POINTER(c_ushort), HRESULT)), > (STDMETHOD(HRESULT, "ignorableWarning", POINTER(ISAXLocator), > POINTER(c_ushort), HRESULT)), > ] > > traceback: > ---------- > File "msxml3.py", line 1292, in ? > ISAXErrorHandler._methods_ = IUnknown._methods_ + [ > File "C:\PROGRA~1\Python22\Lib\site-packages\ctypes\com\__init__.py", line > 59, in STDMETHOD > return name, WINFUNCTYPE(restype, c_voidp, *argtypes) > File "C:\PROGRA~1\Python22\Lib\site-packages\ctypes\__init__.py", line 69, > in WINFUNCTYPE > class WinFunctionType(_CFuncPtr): > TypeError: item 4 in _argtypes_ is not a valid C type > Same as #1, item 4 is the HRESULT again. I have to think about it how this can be fixed. The "DOMNodeType = tagDOMNodeType" problem is probably because TKIND_ALIAS entries are not yet parsed by readtlb. Andrew, thanks for reporting and 'complaining' about all this, it will surely help to make readtlb much better. Thomas |