Hi, all, My project is based on wxPython, and I need an IE control (i.e. WebBrowser ActiveX control). Although the wxPython implements a wrapped version (wx.lib.iewin.IEHtmlWindow), but it doesn't meet all my demands, because I need to custom many behaviors of the control. So I thought I should use it through ActiveXWrapper directly.
So I use makepy to make the typelib of "Microsoft Internet Controls" and "Microsoft HTML Object Library". Now I can get the document object of the WebBrowser, and I can cast it into any interface I need like IHtmlDocument2, IHtmlDocument3... So far, so good. The document object also implements a COM interface IPersistStreamInit, which has a *Load* method. Calling this method can load any stream into the browser control. Here is the a example using this method in visual c++: IPersistStreamInit* spPSI = NULL; CStreamOnCString stream(szHTML); if (m_pHtmlDoc) { m_hResult = m_pHtmlDoc->QueryInterface(IID_IPersistStreamInit, (void**)&spPSI); if( SUCCEEDED(m_hResult) && spPSI ) { m_hResult = spPSI->Load(static_cast<IStream*>(&stream)); spPSI->Release(); } } Now I need to call this method on my document object, my code is just like stream = win32com.client.CastTo(doc, "IPersistStreamInit") stream.Load(somestr) But I got an error: ValueError: The interface name 'IPersistStreamInit' does not appear in the same library as object '<win32com.gen_py.Microsoft HTML Object Library.DispHTMLDocume nt instance at 0x46359096>' I googled and someones says only interfaces inherit from IDispatch can be used by pythoncom. But IPersistStreamInit interface inherits from IUnknown. But I just need to use this interface. However, I also noted that the class wx.lib.iewin.IEHtmlWindow has a *LoadStream* method, I thought it's a wrapper of IPersistStreamInit's Load method. So I trace the source code, but only found the implement is in the c++ base class. Could anybody tell me how to do it? Any clues is helpful. Dapu
-- http://mail.python.org/mailman/listinfo/python-list