win32 COM and data types / direction

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Alexander Eisenhuth

    #1

    win32 COM and data types / direction

    Hello everybody,

    i wonder how the win32 COM extension handles different C-int types
    (short, int, long). Another question for me is weather the
    "out-direction" of parameter is supported "out of the box" ?

    To clarify look at the methode "FunWithTwoInts "
    --------------------------------------------------------------------------
    #SimpleCOMServe r.py - A sample COM server - almost as small as they come!
    #
    # We expose a single method in a Python COM object
    class PythonUtilities :
    _public_methods _ = [ 'FunWithTwoInts ' ]
    _reg_progid_ = "PythonDemo.Uti lities"

    # NEVER copy the following ID!
    # Use "print pythoncom.Creat eGuid( )" to make a new one
    _reg_clsid_ = "{40CEA5F8-4D4C-4655-BD8B-0E7B6A26B556}"

    def FunWithTwoInts( self, inShort, inInt, outSum):
    print "got as short:%d as int:%d sum:%d" % (inShort, inInt, outSum)
    outSum = inShort + inInt

    # Add code so that when this script is run by
    # Python.exe, it self-registers
    if __name__=='__ma in_ _':
    print "Registerin g COM server..."
    import win32com.server .register
    win32com.server .register.UseCo mmandLine(Pytho nUtilities)
    --------------------------------------------------------------------------
    Does anybody have experiences in this ?

    Any help/hints are very welcome.

    Alexander
  • Thomas Heller

    #2
    Re: win32 COM and data types / direction

    Alexander Eisenhuth <newsuser@staco m-software.de> writes:
    [color=blue]
    > Hello everybody,
    >
    > i wonder how the win32 COM extension handles different C-int types
    > (short, int, long). Another question for me is weather the
    > "out-direction" of parameter is supported "out of the box" ?
    >
    > To clarify look at the methode "FunWithTwoInts "
    > --------------------------------------------------------------------------
    > #SimpleCOMServe r.py - A sample COM server - almost as small as they come!
    > #
    > # We expose a single method in a Python COM object
    > class PythonUtilities :
    > _public_methods _ = [ 'FunWithTwoInts ' ]
    > _reg_progid_ = "PythonDemo.Uti lities"
    >
    > # NEVER copy the following ID!
    > # Use "print pythoncom.Creat eGuid( )" to make a new one
    > _reg_clsid_ = "{40CEA5F8-4D4C-4655-BD8B-0E7B6A26B556}"
    >
    > def FunWithTwoInts( self, inShort, inInt, outSum):
    > print "got as short:%d as int:%d sum:%d" % (inShort, inInt, outSum)
    > outSum = inShort + inInt
    >
    > # Add code so that when this script is run by
    > # Python.exe, it self-registers
    > if __name__=='__ma in_ _':
    > print "Registerin g COM server..."
    > import win32com.server .register
    > win32com.server .register.UseCo mmandLine(Pytho nUtilities)
    > --------------------------------------------------------------------------
    > Does anybody have experiences in this ?[/color]

    Since there is no type library, the client code has to guess. And it
    will pass the server whatever the client calls with. That could even be
    a string or anything else - but why not try it out?

    *IF* there is a type library that the server implements, you will get
    and return what it describes.

    Thomas

    Comment

    • Tim Roberts

      #3
      Re: win32 COM and data types / direction

      Alexander Eisenhuth <newsuser@staco m-software.de> wrote:[color=blue]
      >
      >Hello everybody,
      >
      >i wonder how the win32 COM extension handles different C-int types
      >(short, int, long).[/color]

      All of those types are passed on the stack as 32-bit dwords. No problem.
      [color=blue]
      >Another question for me is weather the
      >"out-direction" of parameter is supported "out of the box" ?[/color]

      Yes, but you have to make them outputs from your function. Remember that
      assigning to a parameter in Python does not change the parameter from the
      caller's point of view:

      def FunWithTwoInts( self, inShort, inInt ):
      print "got as short:% as int%d" % (inShort, inInt)
      return inShort + inInt

      If you have multiple OUT parameters, you return a tuple of values.
      [color=blue]
      >To clarify look at the methode "FunWithTwoInts "
      >--------------------------------------------------------------------------
      >#SimpleCOMServ er.py - A sample COM server - almost as small as they come!
      >#
      ># We expose a single method in a Python COM object
      >class PythonUtilities :
      > _public_methods _ = [ 'FunWithTwoInts ' ]
      > _reg_progid_ = "PythonDemo.Uti lities"
      >
      > # NEVER copy the following ID!
      > # Use "print pythoncom.Creat eGuid( )" to make a new one
      > _reg_clsid_ = "{40CEA5F8-4D4C-4655-BD8B-0E7B6A26B556}"
      >
      > def FunWithTwoInts( self, inShort, inInt, outSum):
      > print "got as short:%d as int:%d sum:%d" % (inShort, inInt, outSum)
      > outSum = inShort + inInt
      >
      ># Add code so that when this script is run by
      ># Python.exe, it self-registers
      >if __name__=='__ma in_ _':
      > print "Registerin g COM server..."
      > import win32com.server .register
      > win32com.server .register.UseCo mmandLine(Pytho nUtilities)
      >--------------------------------------------------------------------------[/color]
      --
      - Tim Roberts, timr@probo.com
      Providenza & Boekelheide, Inc.

      Comment

      Working...