Thanks for the patch. It works :) Now I can remove the long
IEnumVARIANT invocation.

On 12/19/07, Thomas Heller <[EMAIL PROTECTED]> wrote:
> [sorry for the late reply...]
>
> Suraj Barkale schrieb:
> > On 12/13/07, Thomas Heller <[EMAIL PROTECTED]> wrote:
> >> It would probably be a good idea to change the "magic" that comtypes
> >> currently implements into something that is more compatible with VB
> >> (or other scripting languages).
> >> However, I fear that changing this may break some existing programs.
> >>
> > It would be good to have same conventions as VB because most of the
> > examples on web use it and similar syntax means lesser brain power
> > required :) But ultimately, only you can decide whether its
> > appropriate to make the change.
>
> I will do this change later (in 0.5, maybe), because I fear backwards compat 
> problems.
>
> > Continuing with the 'Range' object, I ran into a problem that it is
> > not iterable; although it provides _NewEnum member. I don't know if it
> > is a problem specific to my installation of Office 2000. I tried
> > following on the shell:
> >
> >>>> from comtypes.client import CreateObject
> >>>> xl = CreateObject("Excel.Application")
> >>>> wb = xl.Workbooks.Add()
> >>>> rng = xl.Range['A1:C1']
> >>>> rng.Value[()] = (10,"20",31.4)
> >>>> for c in rng:
> >       print c.Value()
> >
> > Traceback (most recent call last):
> >   File "<pyshell#10>", line 1, in <module>
> >     for c in rng:
> > TypeError: 'POINTER(Range)' object is not iterable
> >
> > I think following test case would cover this scenario. My sincerest
> > apologies for not providing a proper patch but I don't have access to
> > svn now.
>
> Well, tests are sometimes even more valuable than code patches ;-).
> I have fixed the problem in SVN, and will release this as 0.4.2 shortly.
> In the meantime you could probably test the attached patch which fixes it.
>
> Thomas
>
> --- snip ---
>
> Modified: ctypes/trunk/comtypes/comtypes/__init__.py
> ==============================================================================
> --- ctypes/trunk/comtypes/comtypes/__init__.py  (original)
> +++ ctypes/trunk/comtypes/comtypes/__init__.py  Wed Dec 19 18:01:33 2007
> @@ -1,6 +1,6 @@
>  import new, types, sys, os
>
> -__version__ = "0.4.1"
> +__version__ = "0.4.2"
>
>  from ctypes import *
>  from _ctypes import COMError
> @@ -232,9 +232,14 @@
>
>      def __setattr__(self, name, value):
>          if name == "_methods_":
> +            # XXX I'm no longer sure why the code generator generates
> +            # "_methods_ = []" in the interface definition, and later
> +            # overrides this by "Interface._methods_ = [...]
> +##            assert self.__dict__.get("_methods_", None) is None
>              self._make_methods(value)
>              self._make_specials()
>          elif name == "_disp_methods_":
> +            assert self.__dict__.get("_disp_methods_", None) is None
>              self._make_dispmethods(value)
>              self._make_specials()
>          type.__setattr__(self, name, value)
> @@ -328,6 +333,9 @@
>          for m in methods:
>              what, name, idlflags, restype, argspec = m
>
> +            # is it a property set or property get?
> +            is_prop = False
> +
>              # argspec is a sequence of tuples, each tuple is:
>              # ([paramflags], type, name)
>              try:
> @@ -337,6 +345,7 @@
>              if what == "DISPPROPERTY": # DISPPROPERTY
>                  assert not argspec # XXX does not yet work for properties 
> with parameters
>                  accessor = self._disp_property(memid, idlflags)
> +                is_prop = True
>                  setattr(self, name, accessor)
>              elif what == "DISPMETHOD": # DISPMETHOD
>                  # argspec is a tuple of (idlflags, type, name[,
> @@ -346,14 +355,26 @@
>                  if 'propget' in idlflags:
>                      nargs = len(argspec)
>                      properties.setdefault((name, nargs), [None, None, 
> None])[0] = method
> +                    is_prop = True
>                  elif 'propput' in idlflags:
>                      nargs = len(argspec)-1
>                      properties.setdefault((name, nargs), [None, None, 
> None])[1] = method
> +                    is_prop = True
>                  elif 'propputref' in idlflags:
>                      nargs = len(argspec)-1
>                      properties.setdefault((name, nargs), [None, None, 
> None])[2] = method
> +                    is_prop = True
>                  else:
>                      setattr(self, name, method)
> +            # COM is case insensitive.
> +            #
> +            # For a method, this is the real name.  For a property,
> +            # this is the name WITHOUT the _set_ or _get_ prefix.
> +            if self._case_insensitive_:
> +                self.__map_case__[name.lower()] = name
> +                if is_prop:
> +                    self.__map_case__[name[5:].lower()] = name[5:]
> +
>          for (name, nargs), methods in properties.items():
>              # methods contains [propget or None, propput or None, propputref 
> or None]
>              if methods[1] and methods[2]:
> @@ -383,6 +404,10 @@
>                  assert len(methods) <= 2
>                  setattr(self, name, property(*methods))
>
> +            # COM is case insensitive
> +            if self._case_insensitive_:
> +                self.__map_case__[name.lower()] = name
> +
>      # Some ideas, (not only) related to disp_methods:
>      #
>      # Should the functions/methods we create have restype and/or
>
>
> --- snip ---
>
>
> -------------------------------------------------------------------------
> SF.Net email is sponsored by:
> Check out the new SourceForge.net Marketplace.
> It's the best place to buy or sell services
> for just about anything Open Source.
> http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
> _______________________________________________
> comtypes-users mailing list
> comtypes-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/comtypes-users
>

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
comtypes-users mailing list
comtypes-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/comtypes-users

Reply via email to