[python-win32] Python COM User Defined Types

william.rooney@us.transport.bombardier.com william.rooney@us.transport.bombardier.com
Fri, 21 Feb 2003 08:49:56 -0500


I am using ActivePython 2.2 Build 224 on Microsoft Windows 2000 SP2.

I have a COM server that has some User Defined Types in the .idl file.  These
UDTs are parameters in some of the methods.
I have run makepy against the type library of the COM server, with the -i option
 and included the two lines in my Python code.
All of the documentation that I have found regarding "records" and "structs" in
COM servers has indicated that I should be able to
to use this COM server with early binding and also be able use these UDTs.  My
problem is that I can not seem to actually do it.
I wonder if I misunderstood the documents that I found.  Also the
mk:@MSITStore:C:\Python22\Doc\win32com.chm::/messages.html
in the help file (and Classes and class members, Functions, and Structures and
Enumberations) is empty.

How can I create variables in my Python code and use them when calling the
WriteMsg2 method (below)?  Why do I not get a list of
available constants when I type "win32com.clients.constants."  Typically after
entering the period at the end of an object I am presented
with a list of attributes/constants/methods.


I am concerned by these lines from the file generated by makepy:
# The following 3 lines may need tweaking for the particular server
# Candidates are pythoncom.Missing and pythoncom.Empty
defaultNamedOptArg=pythoncom.Missing
defaultNamedNotOptArg=pythoncom.Missing
defaultUnnamedArg=pythoncom.Missing

I do not know what to do about the pythoncom.Missing and pythoncom.Empty
candidates.  What should be done about them?

Can I simply create an object of type StackObj like this:
myStack = StackObj()
Reference these two lines from the makepy generated file:
# This CoClass is known by the name 'Stack.StackObj.1'
class StackObj(CoClassBaseClass): # A CoClass


snippet from Python code:
stack = win32com.client.Dispatch("Stack.StackObj")

snippet from the .idl:
  cpp_quote("#pragma pack(push) // save the default packing alignment, typically
 8")
  cpp_quote("#pragma pack(1) // we rely on sizeof() for the sizes of these
structures, tell the compiler not to pad")
  [
    uuid(1FFA712A-14FB-4451-BE52-7B88BBE34DCE),
    helpstring("Revision Info: software and config version and protocol
version")
  ]
  typedef struct tagREVISION_LEVELS2
  {
    short software_rev;
    long  config_rev;
    BYTE  icd_rev;
  } REVISION_LEVELS2;
  cpp_quote("#pragma pack(pop) // restore the default packing alignment")

  interface IStackObj : IDispatch
  {
    ...
    [id(7), helpstring("method WriteMsg2")] HRESULT WriteMsg2([in] struct
tagVB_REVISION_LEVELS2* pRevisionInfo, [in] struct tagVB_HEADER_INFO2* pHeader,
[in,out] SAFEARRAY(BYTE)* psaMsg);
  }

Thanks for all your help,
----Bill Rooney