[python-win32] How to work with Dispach callback?
Mark Hammond
mhammond at skippinet.com.au
Sat Feb 16 00:25:03 CET 2008
It appears that the "universal gateway" support in pywin32 doesn't handle
VT_RECORD. I doubt this would be hard to fix, but its not something I have
time to look at in the short term. I'd suggest you open a bug at
sourceforge, and/or let me know if you are interested in getting your hands
dirty and trying to help fix it (but you will require a C++ compiler)
Cheers,
Mark
> -----Original Message-----
> From: python-win32-bounces at python.org [mailto:python-win32-
> bounces at python.org] On Behalf Of Alexandr N Zamaraev
> Sent: Friday, 15 February 2008 10:16 PM
> To: python-win32 at python.org
> Subject: Re: [python-win32] How to work with Dispach callback?
>
> Mark Hammond wrote:
> > I'd suggest passing 'useDispatcher=1' to com_wrap, so that debug
> output is
> > generated as your object is called (you can see it via the
> win32traceutil.py
> > tool).
> Thank you for the reply.
>
> I'd made it in such way:
> <code lang='python'>
> class LocateCommandEvents(object):
> _com_interfaces_ = [IID_ILocateCommandEvents]
> _typelib_guid_ = '{CF9F97BF-39F2-4B8E-835C-8BE9E99DAF5B}'
> _typelib_version_ = 8, 0
> _typelib_lcid_ = 0
>
> _public_methods_ = []
> _dispid_to_func_ = {
> 0x60020000: 'Accept', 0x60020001: 'LocateFailed', 0x60020002:
> 'LocateFilter', 0x60020003: 'LocateReset', 0x60020004: 'Cleanup',
> 0x60020005: 'Start', 0x60020006: 'Dynamics'}
> </code>
> after it and after editing in win32com.server.policy
> (http://sourceforge.net/tracker/?func=detail&aid=1892592&group_id=78018
> &atid=551956)
>
> the call of
> StartLocate has worked successfully.
>
> Now errors occur in calls to LocateCommandEvents.LocateFilter function
> from MicroStation:
> <code>
> pythoncom error: Failed to call the universal dispatcher
>
> Traceback (most recent call last):
> File "C:\Lang\Python\25\lib\site-packages\win32com\universal.py",
> line 193, in
> dispatch
> WriteFromOutTuple(retVal, meth._gw_out_args, argPtr)
> <type 'exceptions.TypeError'>: The VARIANT type is unknown (0x24).
> pythoncom error: Unexpected gateway error
>
> Traceback (most recent call last):
> File "C:\Lang\Python\25\lib\site-packages\win32com\universal.py",
> line 193, in
> dispatch
> WriteFromOutTuple(retVal, meth._gw_out_args, argPtr)
> <type 'exceptions.TypeError'>: The VARIANT type is unknown (0x24).
> </code>
>
> Perhaps the reason of it is that ILocateCommandEvents turn out not
> fully
> compatible with IDispatch interfaces:
> <code lang='IDL'>
> [
> odl,
> uuid(67CBDE4A-F073-11D4-A8E6-00508B4D8FED),
> helpcontext(0x0000021a),
> dual,
> nonextensible,
> oleautomation
> ]
> interface ILocateCommandEvents : IDispatch {
> [id(0x60020000), helpcontext(0x0000001d)]
> HRESULT Accept(
> [in] _Element* Element,
> [in, out] Point3d* Point,
> [in] _View* View);
> [id(0x60020001), helpcontext(0x00000025)]
> HRESULT LocateFailed();
> [id(0x60020002), helpcontext(0x00000026)]
> HRESULT LocateFilter(
> [in] _Element* Element,
> [in, out] Point3d* Point,
> [in, out] VARIANT_BOOL* Accepted);
> [id(0x60020003), helpcontext(0x00000027)]
> HRESULT LocateReset();
> [id(0x60020004), helpcontext(0x00000020)]
> HRESULT Cleanup();
> [id(0x60020005), helpcontext(0x0000002e)]
> HRESULT Start();
> [id(0x60020006), helpcontext(0x00000022)]
> HRESULT Dynamics(
> [in, out] Point3d* Point,
> [in] _View* View,
> [in] MsdDrawingMode DrawMode);
> };
> </code>
> Point3d - struct, MsdDrawingMode - enum, declared in MicroStation
> Typelib.
>
> Can you give me an advise in the case?
>
> > Its hard to tell though, as the MicroStation object is throwing a
> > type error without providing any other information about what it is
> upset
> > about. You might want to check that MicroStation supports IDispatch
> based
> > event interfaces, otherwise you will need yet more magic to make
> things
> > work...
> >
> > Cheers,
> >
> > Mark
>
>
> _______________________________________________
> python-win32 mailing list
> python-win32 at python.org
> http://mail.python.org/mailman/listinfo/python-win32
More information about the python-win32
mailing list