I've lost some of the context here, but there is a
pythoncom.ObjectFromAddress that looks like it does exactly what you
want - check out the pywin32 docs for details...
HTH,
Mark
On 14/12/2012 11:04 AM, Gilles Baggieri wrote:
Mark Hammond <skippy.hammond <at> gmail.com> writes:
I'm not familiar enough with ctypes to know if that makes sense, but I
doubt it - nothing would seem to know the size of the buffer pointed at
by 'x'. You probably need to stick with using a python string object -
ensure the string contains exactly the bytes of the metafile.
Mark
On 25/03/2012 10:33 PM, shuwj wrote:
I believe a c_void_p is a ctypes construct which aren't supported by
pywin32. You need to convert it to a "normal" Python type. I'm
guessing it is binary data, so in py2k, you should be able to simply use
buffer(some_string_object). The error message seems to imply you may
even be able to use buffer(c_void_p_object), but I don't know how they
work well enough to suggest that will actually work.
Mark
Hi Mark,
Thanks for your reply. I use buffer() in GetImage method and there's no
exception now, but they don't work as expected.
-----------------------------------------
class wordaddin:
def GetImage(self,ctrl):
from gdiplus import LoadImage
i = LoadImage( 'c:/edit.png' )
i = buffer(i)
print i, 'ddd'
return i
-----------------------------------------
Hello,
After spending several hours with the same problem (thanks for gdiplus.py, great
job!), I've found a solution from Thomas Heller's comtypes testunits. The idea
is to cast 'x' (pointer) to a comtypes POINTER(IUnknown), and then convert again
to pythoncom PyIDispatch.
Add this to the end of gdiplus LoadImage (but don't use buffer() as the returned
object can be return as is to RibbonX callback):
...
if not x.value:
return None
from comtypes.automation import VARIANT, IUnknown, IDispatch
from ctypes import cast, POINTER, PyDLL, py_object, c_void_p, byref
from ctypes.wintypes import BOOL
import pythoncom
# cast to comtypes IUnknown
cobj = cast(x,POINTER(IUnknown))
# cast to PyIDispatch
_PyCom_PyObjectFromIUnknown =
PyDLL(pythoncom.__file__).PyCom_PyObjectFromIUnknown
_PyCom_PyObjectFromIUnknown.restype = py_object
_PyCom_PyObjectFromIUnknown.argtypes = (POINTER(IUnknown), c_void_p, BOOL)
return _PyCom_PyObjectFromIUnknown(cobj, byref(IDispatch._iid_), True)
Perhaps is there a shorter (and clearer!) way...
Gilles
_______________________________________________
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