Re: [comtypes-users] PATCH accepting interleaved [out] and [in] arguments (on event handlers)

2008-11-26 Thread Thomas Heller
Torbjorn Tyridal schrieb:
 Oh well.. Here it is anyway..
 
 The asumtion that [out] arguments are placed after [in] arguments
 proved false, here is a patch that accepts arguments in any order.

I have now written a single unit test for this (which is probably not
enough) and applied your patch to the repository.  Many thanks again,

Thomas


-
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK  win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100url=/
___
comtypes-users mailing list
comtypes-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/comtypes-users


Re: [comtypes-users] PATCH accepting interleaved [out] and [in] arguments (on event handlers)

2008-11-05 Thread Thomas Heller
Torbjorn Tyridal schrieb:
 Oh well.. Here it is anyway..

Many thanks for the patch.  I will create additional unittests
for the new behaviour and eventually commit it.

 The asumtion that [out] arguments are placed after [in] arguments
 proved false, here is a patch that accepts arguments in any order.
 
 ==
 --- comtypes-0.5.2\_comobject.py  Fri Sep 19 21:49:50 2008
 +++ comtypes\_comobject.pyWed Oct 29 22:04:20 2008
 @@ -89,34 +89,44 @@ def hack(inst, mth, paramflags, interfac
  # An argument is an input arg either if flags are NOT set in the
  # idl file, or if the flags contain 'in'. In other words, the
  # direction flag is either exactly '0' or has the '1' bit set:
 -args_in = len([f for f in dirflags if (f == 0) or (f  1)])
 -# number of output arguments:
 -args_out = len([f for f in dirflags if f  2])
 +# Output arguments have flag '2'
 +
 +args_out_idx=[]
 +args_in_idx=[]
 +for i,a in enumerate(dirflags):
 +if a2:
 +args_out_idx.append(i)
 +if a1 or a==0:
 +args_in_idx.append(i)
 +args_out = len(args_out_idx)
 +
  ## XXX Remove this:
  ##if args_in != code.co_argcount - 1:
  ##return catch_errors(inst, mth, interface, mthname)
 -# This code assumes that input args are always first, and output
 -# args are always last.  Have to check with the IDL docs if this
 -# is always correct.
 
  clsid = getattr(inst, _reg_clsid_, None)
  def call_without_this(this, *args):
 -outargs = args[len(args)-args_out:]
  # Method implementations could check for and return E_POINTER
  # themselves.  Or an error will be raised when
  # 'outargs[i][0] = value' is executed.
  ##for a in outargs:
  ##if not a:
  ##return E_POINTER
 +
 +#make argument list for handler by index array built above
 +inargs=[]
 +for a in args_in_idx:
 +inargs.append(args[a])
 +
  try:
 -result = mth(*args[:args_in])
 +result = mth(*inargs)
  if args_out == 1:
 -outargs[0][0] = result
 +args[args_out_idx[0]][0] = result
  elif args_out != 0:
  if len(result) != args_out:
  raise ValueError(Method should have returned a
 %s-tuple % args_out)
  for i, value in enumerate(result):
 -outargs[i][0] = value
 +args[args_out_idx[i]][0] = value
  except ReturnHRESULT, (hresult, text):
  return ReportError(text, iid=interface._iid_,
 clsid=clsid, hresult=hresult)
  except COMError, (hr, text, details):
 
 


-- 
Thanks,
Thomas


-
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK  win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100url=/
___
comtypes-users mailing list
comtypes-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/comtypes-users