[python-win32] how can I do marshall.ReleaseComObject in python ?? [SEC=UNOFFICIAL]
Matteo Boscolo
matteo.boscolo at boscolini.eu
Wed Sep 12 09:58:10 CEST 2012
Finally I solved the problem using the attached function to release the
com object
def ReleaseDocumentReference(self,doc):
if not is_tracked( doc._oleobj_):
x=doc._oleobj_
if is_tracked(x):
print "Now x is traked"
addr = int(repr(x).split()[-1][2:-1], 16)
from ctypes import *
from comtypes.automation import IDispatch
from _ctypes import CopyComPointer
p = POINTER(IDispatch)()
cast(byref(p), POINTER(c_void_p))[0] = addr
if is_tracked(p):
print "Now is traked"
p.Release()
the problem was due to the doc._oleobj_ that contains the PyIDispatch
object that was not tracked by the garbage collector ..
regards,
Matteo
Il 12/09/2012 03:00, Andrew MacIntyre ha scritto:
>
> [sorry for top post]
>
> CPython uses reference counting; when the reference count drops to 0,
> the object is deleted and its memory returned to the heap.
>
> CPython's garbage collector is there to attempt to resolve situations
> where the reference count is not being allowed to drop to 0 (such as
> via circular references). CPython's garbage collector isn't the same
> as garbage collection in other languages (such as Java).
>
> Setting a variable to None in CPython will definitely force an object
> to be deleted if its reference count drops to zero.
>
> The garbage collector has an additional function (run as a
> side-effect) which may give the impression of delayed cleanup -- when
> it is run, it checks the state of Python's private memory allocator,
> and if there are unused memory chunks in the private heap it will
> return them to the OS.
>
> -------------------------> "These thoughts are mine alone!" <---------
>
> Andrew MacIntyre Operations Branch
>
> tel: +61 2 6219 5356 Communications Infrastructure Division
>
> fax: +61 2 6253 3277 Australian Communications & Media Authority
>
> email: andrew.macintyre at acma.gov.au
> <mailto:andrew.macintyre at acma.gov.au>http://www.acma.gov.au/
>
> *From:*python-win32
> [mailto:python-win32-bounces+andrew.macintyre=acma.gov.au at python.org]
> *On Behalf Of *Randy Syring
> *Sent:* Wednesday, 12 September 2012 12:09 AM
> *To:* python-win32 at python.org
> *Subject:* Re: [python-win32] how can I do marshall.ReleaseComObject
> in python ?? [SEC=UNCLASSIFIED]
>
> I'm not sure how this applies to COM and the python interface to it,
> but just setting a value to None doesn't usually force the object to
> go away in Python. That won't happen until it is garbage collected,
> which you can force if needed:
>
> http://docs.python.org/library/gc.html
>
> ---------------------------------------------
> Randy Syring
> Development & Executive Director
> Level 12 Technologies <https://www.lev12.com/>
> Direct: 502-276-0459
> Office: 502-212-9913
>
> Principled People, Technology that Works
>
> On 09/11/2012 09:35 AM, Matteo Boscolo wrote:
>
> I try with both method but with no result:
> the code is this :
> def GerPropValue2(self,name):
> try:
> oiDoc,ent=self._getCurrentEnt
> if ent!=None:
> props=ent.Properties(True)
>
> return "aaa" # Go out here for testing pourpuse
>
> for i in range(0, len(props)): # check the len it
> could give some error
> logging.debug('_getProp : property found
> %s',str(props[i].Parent.Name))
> if props[i].Parent.Name==name:
> return props[i].Value
> return None
> finally:
> del ent
> del props
> del oiDoc
> props=None
> tdProp=None
> oiDoc=None
> ent=None
>
> there is any way to debug how is the object deleted ?
>
> regards,
> Matteo
>
>
> Il 11/09/2012 02:47, Andrew MacIntyre ha scritto:
>
> [sorry for top-post]
>
> You probably need to release the Python object that is
> wrapping the COM object.
>
> Given a variable x holding a COM object reference, either:
>
> del x
>
> or
>
> x = None
>
> should force release of any COM object reference.
>
> Which to use depends on taste and context -- the latter
> approach for example being perhaps more usual when dealing
> with object attributes.
>
> -------------------------> "These thoughts are mine alone!"
> <---------
>
> Andrew MacIntyre Operations Branch
>
> tel: +61 2 6219 5356 Communications Infrastructure Division
>
> fax: +61 2 6253 3277 Australian Communications & Media
> Authority
>
> email: andrew.macintyre at acma.gov.au
> <mailto:andrew.macintyre at acma.gov.au> http://www.acma.gov.au/
>
> *From:*python-win32
> [mailto:python-win32-bounces+andrew.macintyre=acma.gov.au at python.org]
> *On Behalf Of *Matteo Boscolo
> *Sent:* Tuesday, 11 September 2012 4:00 AM
> *To:* python-win32 at python.org <mailto:python-win32 at python.org>
> *Subject:* [python-win32] how can I do
> marshall.ReleaseComObject in python ??
>
> Hi All,
>
> I'm Working on a cad program using the it's com interface
>
> I have a python com object in witch I call a method as follows ..
>
> props=ent.Properties(True)
> #Ent is a IDocument
> this method is working well, and return a tuple of
> ITDProperty that are the property of the document.
>
> The problem is when I close the document from the Cad
> application, the Cad application is unable to close the
> document because there is some reference still active.
> I tried several way using the gc.collect(), to set to null
> each document pointer but with no result.
> I tried to do the some kind of operation with c# and using the
> Marshal.ReleaseComObject(doc);, where doc is the IDocument,
> and document is released and I'm free to close it from the
> interface.
>
> *now the question is how can I do the some staff as
> ReleaseComObject dose in python ?*
>
> its the Release method of the |IUnknown|interface the right
> way to do that ?
>
> any hint is really appreciated, thanks
>
> Regards,
> Matteo
>
>
>
>
> NOTICE: This email message is for the sole use of the intended
> recipient(s)
> and may contain confidential and privileged information. Any
> unauthorized
> review, use, disclosure or distribution is prohibited. If you
> are not the
> intended recipient, please contact the sender by reply email
> and destroy all
> copies of the original message.
>
>
>
>
> _______________________________________________
>
> python-win32 mailing list
>
> python-win32 at python.org <mailto:python-win32 at python.org>
>
> http://mail.python.org/mailman/listinfo/python-win32
>
>
>
>
>
> _______________________________________________
>
> python-win32 mailing list
>
> python-win32 at python.org <mailto:python-win32 at python.org>
>
> http://mail.python.org/mailman/listinfo/python-win32
>
> NOTICE: This email message is for the sole use of the intended
> recipient(s)
> and may contain confidential and privileged information. Any unauthorized
> review, use, disclosure or distribution is prohibited. If you are not the
> intended recipient, please contact the sender by reply email and
> destroy all
> copies of the original message.
>
>
>
> _______________________________________________
> python-win32 mailing list
> python-win32 at python.org
> http://mail.python.org/mailman/listinfo/python-win32
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-win32/attachments/20120912/ceb49de8/attachment-0001.html>
More information about the python-win32
mailing list