ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> pyxpcom
pyxpcom
Re: [pyxpcom] how to get a nsIWeakReference in pyxpcom?
by Tomeu Vizoso other posts by this author
Jun 22 2007 4:20AM messages near this date
view in the new Beta List Site
Re: [pyxpcom] how to get a nsIWeakReference in pyxpcom? | Re: [pyxpcom] how to get a nsIWeakReference in pyxpcom?
Ok, thanks.

weak_ref2._comobj_ looks a bit ugly and counter-intuitive. Perhaps
pyxpcom could do that implicitly if we pass a WeakReference to a method
that accept a nsIWeakReference?

On Thu, 2007-06-21 at 12:26 -0700, Shane Caraveo wrote:
>  Ahh, I see the problem.  pyxpcom WeakReference class != nsIWeakReference 
>    instance, but is a wrapper of that instead to may xpcom weakreferences 
>  work like python weakreferences.  So you cannot use 
>  xpcom.client.WeakReference directly.  What you had in the first place is 
>  the correct thing to do:
>  
>  self.browser.addWebBrowserListener(weak_ref2._comobj_,
>                                      interfaces.nsIWebProgressListener)
>  
>  Shane
>  
>  Tomeu Vizoso wrote:
>  > Yeah, I have read that at least a dozen times today ;)
>  > 
>  > self.browser.addWebBrowserListener(WeakReference(chrome, interfaces.nsIWebProgressListen
er),
>  >                                    interfaces.nsIWebProgressListener)
>  > 
>  > doesn't work: 
>  > 
>  > File "<XPCOMObject method 'addWebBrowserListener'>", line 3, in addWebBrowserListener
>  > TypeError: Objects of type 'instance' can not be used as COM objects
>  > 
>  > On Thu, 2007-06-21 at 11:29 -0700, Shane Caraveo wrote: 
>  >> From the doc string for WeakReference:
>  >>
>  >> class WeakReference:
>  >>      """A weak-reference object.  You construct a weak reference by passing
>  >>      any COM object you like.  If the object does not support weak
>  >>      refs, you will get a standard NS_NOINTERFACE exception.
>  >>
>  >>      Once you have a weak-reference, you can "call" the object to get
>  >>      back a strong reference.  Eg:
>  >>
>  >>      >>> some_ob = components.classes['...']
>  >>      >>> weak_ref = WeakReference(some_ob)
>  >>      >>> new_ob = weak_ref() # new_ob is effectively "some_ob" at this point
>  >>      >>> # EXCEPT: new_ob may be None if some_ob has already died - a
>  >>      >>> # weak reference does not keep the object alive (that is the point)
>  >>
>  >>      You should never hold onto this resulting strong object for a long 
>  >> time,
>  >>      or else you defeat the purpose of the weak-reference.
>  >>      """
>  >>
>  >>
>  >> Tomeu Vizoso wrote:
>  >>> Hi all,
>  >>>
>  >>> I need to pass a reference to a nsIWeakReference to
>  >>> nsIWebBrowser.addWebBrowserListener(nsIWeakReference listener, nsIIDRef
>  >>> IID).
>  >>>
>  >>> The only way I've found to do it is this:
>  >>>
>  >>> listener = xpcom.server.WrapObject(chrome, interfaces.nsIWebProgressListener)
>  >>> weak_ref2 = xpcom.client.WeakReference(listener)
>  >>> self.browser.addWebBrowserListener(weak_ref2._comobj_,
>  >>>                                    interfaces.nsIWebProgressListener)
>  >>>
>  >>> I guess weak_ref2._comobj_ is not the best way to get a nsIWeakReference.
>  >>>
>  >>> Any suggestion?
>  >>>
>  >>> Thanks,
>  >>>
>  >>> Tomeu
>  >>>
>  >>> _______________________________________________
>  >>> pyxpcom mailing list
>  >>> pyxpcom@[...].com
>  >>> To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs
>  > 

_______________________________________________
pyxpcom mailing list
pyxpcom@[...].com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs
Thread:
Tomeu Vizoso
Shane Caraveo
Tomeu Vizoso
Shane Caraveo
Tomeu Vizoso
Mark Hammond

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved