Ok, what you told me works for this simple program:
 
class HelloWorld:
    _reg_clsid_ = "{4E5807E3-C445-4A3C-A4BC-FD81697B661A}"
    _reg_progid_ = "Python.TestServer"
    _public_methods_ = ['Hello']
    def __init__(self):
        pass
    def Hello(self, who):
        return "Hello" + who
 
regsvr32.exe tells me that registering the dll has succeeded and I can call the function Hello from a VB .Net application.
 
But when I try to register another compiled dll, a more complicated one, then win32traceutil gives me the following error when I try to register the DLL:
 
Traceback (most recent call last):
  File "<string>", line 1, in ?
  File "boot_com_servers.py", line 62, in DllRegisterServer
  File "win32com\server\register.pyc", line 404, in RegisterCl
AttributeError: Runescape instance has no attribute '__name__'
 
The file I tried to compile/register uses the modules sys, Image, Imagechops, pythoncom and urllib.urlopen and works perfectly in non-compiled mode.
 
I also tried running the exe I get when i set create_exe in the setup.py script to True; that gives me the following error:
Traceback (most recent call last):
  File "boot_com_servers.py", line 44, in ?
ImportError: dynamic module does not define init function (initrunescape)
 
Do you know what I might have done wrong?
 
Floris

 
On 6/26/06, Mark Hammond <[EMAIL PROTECTED]> wrote:
> Py2exe supports making com servers as dlls or as exes.  After I
> create a com server with py2exe, how do I get it registered?

If it is a .exe, you just run it.  If it is a DLL, you use regsvr32.exe to
register it - ie, you register them just like any other COM EXE or DLL
files.

> If I need to register additional registry keys when the
> com server is registered, how is that handled?

py2exe and pywin32 have special support for "DllRegisterServer" and
"DLLUnregisterServer" functions - just create functions of this name in your
main module, and py2exe will find and use them (see boot_com_servers.py in
the py2exe distro).  Your "normal" .py implemented COM objects can leverage
the same thing by using something like:

def DllRegisterServer():
...
def DllUnregisterServer():
...
if __name__=='__main__':
win32com.server.register.HandleCommandLine(...,
                                            finalize_register=DllRegisterSe
rver,
                                            finalize_unregister=DllUnregist
erServer)

Mark

_______________________________________________
Python-win32 mailing list
Python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

_______________________________________________
Python-win32 mailing list
Python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to