[python-win32] Creating a TLB for PythonCOM server

Mariano Reingart reingart at gmail.com
Thu Dec 16 21:08:01 CET 2010


Hello

I'm trying to create a type library (TLB) using MIDL.EXE for a
PythonCom server, but I don't fully understand the brief MSDN
ducumentation:
http://msdn.microsoft.com/en-us/library/ms690150(v=VS.85).aspx

I've been able to create the TLB file, but when using it in VB, I get
a Run-time error '13': "Type mismatch" with this code:

Dim WSAA As PyAfipWs.WSAA
Set WSAA = CreateObject("WSAA")
Debug.Print WSAA.Version

Testing it with python, makepy.py sucessfully creates the python
classes, but it doesn't use them when I do:

win32com.client.Dispatch("WSAA")

Following is the code in question:

Python COM server (stripped version):
-------------------------------------

class WSAA:
    _public_methods_ = ['CreateTRA']
    _public_attrs_ =  _readonly_attrs_ = ['Version']
    _reg_progid_ = "WSAA"
    _reg_clsid_ = "{6268820C-8900-4AE9-8A2D-F0A1EBD4CAC5}"

    def __init__(self):
        self.Version = "1234"

    def CreateTRA(self, service="wsfe", ttl=2400):
        return "pass"


full code at:
http://code.google.com/p/pyafipws/source/browse/pyafipws.py


IDL file (stripped version):
----------------------------

import "unknwn.idl","oaidl.idl";
[
uuid(6268820C-8900-4AE9-8A2D-F0A1EBD4CAC5),
helpstring("PyAfipWs WSAA interface"),
pointer_default(unique),
//dual,
//oleautomation
object
]
interface WSAAif : IDispatch //IUnknown
{
   HRESULT CreateTRA([in] VARIANT service, [in] VARIANT ttl,
                   [out, retval] VARIANT * tra);
   [propget] HRESULT Version( [out, retval] VARIANT *  sign);
};

[
uuid(a03d1423-b1ec-11d0-8c3a-00c04fc31d2f),
version(1.0),
helpstring("PyAfipWs Type Library"),
] library PyAfipWs
{
  importlib("stdole32.tlb");
  [
  uuid(a03d1422-b1ec-11d0-8c3a-00c04fc31d2f),
  helpstring("WSAA Component Class")
  ] coclass WSAA
    {
    [default]interface WSAAif;
    }	
}; //end library def



I think I'm missing something and surely I'm doing something wrong
(related to IUnknown/IDispatch, dual/oleautomation/object, CLSID,
PROGID, etc.). I've tested many combinations and none seems to work.


Do you have any advice?


Thanks in advance,

Mariano Reingart
http://www.sistemasagiles.com.ar
http://reingart.blogspot.com


More information about the python-win32 mailing list