Jef, I'm not sure if this is helpful but you might try taking a look at the Pamie code for how it gets deals with the DOM.
Additionally the following code snip may be helpful (self is win32com.Client.Dispatch returned IE object) Regards, Richard ----- code ----- def Dom(self, errorFlag = True, message = None ): """ Sets Yamie's dom attribute (topmost element of the page's DOM tree). yie.Dom([errorFlag,][errorMessage])->object #HTML element in the DOM tree The DOM is rebuilt after each navigation. Previous values are no longer good. Parameters: errorFlag (boolean) If True, COM error messages are written to stderr. Otherwise, COM error messages are surpressed. message (string) A message to output on COM errors. Returns: dom (object) The topmost element in the page's DOM tree. dom is None on COM error. Set status and comError. Usage: >>> dom = yie.Dom() >>> print dom #doctest: +ELLIPSIS <win32com.gen_py.Microsoft HTML Object Library.DispHTMLHtmlElement instance at 0x...> >>> print dom.CLSID {3050F560-98B5-11CF-BB82-00AA00BDCE0B} >>> len(dir(dom)) 65 >>> len(dom._prop_map_get_.keys()) 130 >>> dir(dom) == ['CLSID', 'FireEvent', '_ApplyTypes_', '__cmp__', '__doc__', ... '__getattr__', '__init__', '__module__', '__repr__', '__setattr__', '_get_good_object_', ... '_get_good_single_object_', '_oleobj_', '_prop_map_get_', '_prop_map_put_', ... 'addBehavior', 'addFilter', 'appendChild', 'applyElement', 'attachEvent', 'blur', ... 'clearAttributes', 'click', 'cloneNode', 'coclass_clsid', 'componentFromPoint', ... 'contains', 'createControlRange', 'detachEvent', 'doScroll', 'dragDrop', 'focus', ... 'getAdjacentText', 'getAttribute', 'getAttributeNode', 'getBoundingClientRect', ... 'getClientRects', 'getElementsByTagName', 'getExpression', 'hasChildNodes', ... 'insertAdjacentElement', 'insertAdjacentHTML', 'insertAdjacentText', 'insertBefore', ... 'mergeAttributes', 'normalize', 'releaseCapture', 'removeAttribute', ... 'removeAttributeNode', 'removeBehavior', 'removeChild', 'removeExpression', ... 'removeFilter', 'removeNode', 'replaceAdjacentText', 'replaceChild', 'replaceNode', ... 'scrollIntoView', 'setActive', 'setAttribute', 'setAttributeNode', 'setCapture', ... 'setExpression', 'swapNode', 'toString'] True >>> dom._prop_map_get_.keys()== ['all', 'contentEditable', 'parentElement', ... 'onrowsinserted', 'disabled', 'filters', 'onrowexit', 'children', 'style', ... 'ondataavailable', 'nodeName', 'ondatasetchanged', 'clientLeft', 'accessKey', ... 'offsetLeft', 'ondatasetcomplete', 'currentStyle', 'hideFocus', 'onclick', 'onkeypress', ... 'onbeforeupdate', 'onpropertychange', 'onresizestart', 'onmouseover', 'recordNumber', ... 'onscroll', 'onrowenter', 'clientHeight', 'onmouseenter', 'canHaveChildren', 'onkeyup', ... 'readyStateValue', 'onreadystatechange', 'dir', 'tagUrn', 'onfocusout', 'innerHTML', ... 'className', 'ondeactivate', 'onmoveend', 'ondragleave', 'glyphMode', 'onresize', ... 'version', 'onresizeend', 'offsetTop', 'onfocus', 'ondrag', 'previousSibling', ... 'onfocusin', 'nodeType', 'onbeforeeditfocus', 'onkeydown', 'outerText', 'onbeforecopy', ... 'language', 'title', 'firstChild', 'oncut', 'onbeforedeactivate', 'attributes', ... 'onmove', 'offsetParent', 'behaviorUrns', 'clientWidth', 'outerHTML', 'tagName', ... 'offsetHeight', 'onerrorupdate', 'onbeforepaste', 'childNodes', 'tabIndex', ... 'scrollWidth', 'onpage', 'isDisabled', 'onhelp', 'oncontrolselect', 'onmouseup', ... 'onmousemove', 'isMultiLine', 'onblur', 'onmouseout', 'oncellchange', 'sourceIndex', ... 'scrollLeft', 'parentTextEdit', 'onmousewheel', 'lastChild', 'scrollHeight', ... 'oncontextmenu', 'onrowsdelete', 'readyState', 'inflateBlock', 'onlayoutcomplete', ... 'innerText', 'onmovestart', 'offsetWidth', 'uniqueID', 'onafterupdate', 'ondragenter', ... 'nextSibling', 'onmousedown', 'clientTop', 'parentNode', 'oncopy', 'onfilterchange', ... 'id', 'ondrop', 'isTextEdit', 'onbeforecut', 'ownerDocument', 'onactivate', ... 'runtimeStyle', 'document', 'isContentEditable', 'ondragstart', 'onmouseleave', ... 'uniqueNumber', 'scrollTop', 'onpaste', 'ondragover', 'lang', 'ondragend', ... 'canHaveHTML', 'scopeName', 'nodeValue', 'onlosecapture', 'onbeforeactivate', ... 'ondblclick', 'onselectstart'] True """ try: node = self.Document.all.tags("HTML") self.dom = node.item(0) return self.dom except pythoncom.com_error, (hr, hrtxt, addinfo, arg): self.dom = None if not message: message = 'Dom error' self._ComError( errorFlag, message, hr, hrtxt, addinfo, arg) return None |-----Original Message----- |From: [EMAIL PROTECTED] [mailto:python-win32- |[EMAIL PROTECTED] On Behalf Of Mark Hammond |Sent: Friday, June 29, 2007 11:47 PM |To: 'Jef Allbright'; python-win32@python.org |Subject: Re: [python-win32] IE DOM ptr as input to DLL function - |Doingthisright? | |> I'm a newbie to Win32 COM and am unsure whether my current problem |> lies in what I'm doing or possibly in some quirk of the DLL I'm trying |> to use from Python. |> |> I have a snippet of C++ that I want to implement in Python: |> |> IDispatch* pVoid; |> m_pBrowserApp->get_Document(&pVoid); |> m_pAnalyzer->Analyze(pVoid, _variant_t(5L)); |> pVoid->Release(); |> |> At first, I tried using win32com.Client.Dispatch to create a COM |> object for both my DLL and for the IE browser, and that worked well up |> to the point where I tried to use the ie.Document object as input to |> Analyze where it expects the pVoid. Got "argument is not a COM |> object" | |In general, COM itself doesn't understand a "void *". In the example |above, |that first param would probably be best defined as IUnknown rather than |void. Further, in general, win32com only supports IDispatch based |interfaces, but the C++ example above is using vtables. If you can get |your |analyzer interface working via IDispatch, it will work correctly from |Python, as well as VBScript, JS, etc... | |I'm afraid I can't help with the comtypes issues... | |Cheers, | |Mark | |_______________________________________________ |Python-win32 mailing list |Python-win32@python.org |http://mail.python.org/mailman/listinfo/python-win32 _______________________________________________ Python-win32 mailing list Python-win32@python.org http://mail.python.org/mailman/listinfo/python-win32