#This file is covered by the GNU General Public License.\r
#See the file COPYING for more details.\r
\r
+from logHandler import log\r
+\r
#Monkey patch comtypes to support byref in variants\r
from comtypes.automation import VARIANT, VT_BYREF\r
from ctypes import cast, c_void_p\r
return comtypes.client.dynamic.MethodCaller(0,self)(*args,**kwargs)\r
comtypes.client.dynamic._Dispatch.__call__=new__call__\r
\r
+# Work around an issue with comtypes where __del__ seems to be called twice on COM pointers.\r
+# This causes Release() to be called more than it should, which is very nasty and will eventually cause us to access pointers which have been freed.\r
+from comtypes import _compointer_base\r
+_cpbDel = _compointer_base.__del__\r
+def newCpbDel(self):\r
+ if hasattr(self, "_deleted"):\r
+ # Don't allow this to be called more than once.\r
+ log.debugWarning("COM pointer %r already deleted" % self)\r
+ return\r
+ _cpbDel(self)\r
+ self._deleted = True\r
+newCpbDel.__name__ = "__del__"\r
+_compointer_base.__del__ = newCpbDel\r
+del _compointer_base\r
+\r
#Monkey patch to force dynamic Dispatch on all vt_dispatch variant values.\r
#Certainly needed for comtypes COM servers, but currently very fiddly to do just for that case \r
oldVARIANT_value_fget=VARIANT.value.fget\r
from logHandler import log\r
import addonHandler\r
\r
-# Work around an issue with comtypes where __del__ seems to be called twice on COM pointers.\r
-# This causes Release() to be called more than it should, which is very nasty and will eventually cause us to access pointers which have been freed.\r
-from comtypes import _compointer_base\r
-_cpbDel = _compointer_base.__del__\r
-def newCpbDel(self):\r
- if hasattr(self, "_deleted"):\r
- # Don't allow this to be called more than once.\r
- log.debugWarning("COM pointer %r already deleted" % self)\r
- return\r
- _cpbDel(self)\r
- self._deleted = True\r
-newCpbDel.__name__ = "__del__"\r
-_compointer_base.__del__ = newCpbDel\r
-del _compointer_base\r
-\r
def doStartupDialogs():\r
import config\r
import gui\r