Thank your your excellent help, Mark. I have gotten everything to compile
properly, and can call IExtractImage::GetLocation and IExtractImage::Extract
from python on the necessary files. Even the exceptions on unknown file
types seem to be handled properly.

The final problem is getting the image data into python (and using it in
wxpython). The final return type is an HBITMAP, which I can see as an int in
Python using PyLong_FromVoidPtr, or as a PyHANDLE in python using
PyWinObject_FromHANDLE.

I realize that a discussion on wxpython would be outside this group's topic,
but if anyone could tell me where to start looking for a way to do this, I
would greatly appreciate it. From what I can tell, wxpython/wxwindows uses
the HBITMAP type internally to store images, and it appears to be a pointer
to a DIB in memory. If so, it may be possible to use wx.BitmapFromBuffer,
wx.BitmapFromBits, or some similar function, if I can somehow convert the
HBITMAP data (instead of the handle) to a string.

Thanks,
Steven James

On 4/19/07, Mark Hammond <[EMAIL PROTECTED]> wrote:

> I have been delving in to the process of adding support for
IExtractImage
to
> pythonwin. I have run makegw on the necessary files, added the resulting
.cpp
> and .h files to com/win32comext/shell/src, added references in shell.cpp
and
> setup.py, and now it seems all that is left to do is implement the
proper
> data types which makegw did not know how to handle. (Also, if it would
> help anyone, I patched my makegw to run under Python 2.5 with no regex
> or regsub modules.)

Excellent - please feel free to send me the patches.  makegw is *very*
dumb
though.

> I have a few questions about the next steps, for those who may have done
this before:

> I am left with a few lines of code in the PyIExtractImage.cpp file that
look like this:

> if (bPythonIsHappy && !PyObject_AsDWORD *( obpdwPriority, &pdwPriority
))
bPythonIsHappy = FALSE;

See above - makepy is dumb :)  For now, PyInt_AsLong should work fine for
a
DWORD.  HBITMAP should just use PyLong_FromVoidPtr (or however that is
spelt), and a SIZE already has PyWinObject_FromSIZE.  You will just need
to
correct the invalid indirections created by makegw - eg, your line above
would read as:

> DWORD dwPriority;
> if (bPythonIsHappy && !PyInt_AsLong( obpdwPriority, (long *)&dwPriority
))
bPythonIsHappy = FALSE;

Also, please see the existing support for IExtractIcon - this new
interface
should be almost identical - just one or 2 data types appear to be
different
between the interfaces (HICON -> HBITMAP being the most obvious one)

Cheers,

Mark


_______________________________________________
Python-win32 mailing list
Python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to