[python-win32] returning COM objects from a COM server
Sébastien de Menten
sdementen at hotmail.com
Thu Aug 4 12:46:33 CEST 2005
Hi,
I have several classes that I would like to map to COM objects to make them
accessible from Excel via COM.
I have looked at the COM server interp.py supplied as example in the
win32all package and I can access it easily from Excel.
Now, if I add a new class Foo
class Foo:
def test(self):
return 4
and a new funcion in this Interpreter class like
def return_foo(self):
return Foo()
when I call from Excel the function return_foo() on the object
Python.Interpreter, I get in the "Python trace collector" an exception:
in _Invoke_ with 1002 1033 3 (4,)
pythoncom error: Python error invoking COM method.
exceptions.TypeError: Objects for SAFEARRAYS must be sequences (of
sequences), or a buffer object.
Evidently, Foo is not a COM Object. So how do I make it a COM Object ?
I can register a new COM server "Python.Foo" and use
def return_foo(self):
return win32com.client.Dispatch("Python.Foo")
but then:
a) anybody could create it while I only want Python.Interpreter to do
that
b) it is not very elegant :-)
So, is it possible to create new COM objects that map Python classes
automatically ? Do they need to register ?
Any example to advise ?
BTW, why is not there a COMServer class in win32all that could enjoy
metaclass facilities and inheritance to ease the work (I agree it is already
quite easy but ...) ? Is it for historical reasons or is there a deep
explanation ?
tx
Seb
ps: could you reply to my address as I am not subscribed to the mailing list
?
More information about the Python-win32
mailing list