Blair Hall
2014-09-26 05:32:16 UTC
I have been working on this all day, with no joy. Some help would be
appreciated :-)
I have a simple COM server (that I found on the internet):
#-------------------------------------------------------------------
import pythoncom
import sys
class HelloWorld:
#pythoncom.frozen = 1
if hasattr(sys, 'importers'):
_reg_class_spec_ = "__main__.HelloWorld"
_reg_clsctx_ = pythoncom.CLSCTX_LOCAL_SERVER
_reg_clsid_ = '{E3D5F332-F080-47B3-A319-A3A0E287E466}'
_reg_desc_ = "Python Test COM Server"
_reg_progid_ = "Python.TestServer"
_public_methods_ = ['Hello']
_public_attrs_ = ['softspace', 'noCalls']
_readonly_attrs_ = ['noCalls']
def __init__(self):
self.softspace = 1
self.noCalls = 0
def Hello(self, who):
self.noCalls = self.noCalls + 1
# insert "softspace" number of spaces
print "Hello" + " " * self.softspace + str(who)
return "Hello" + " " * self.softspace + str(who)
if __name__=='__main__':
import sys
if hasattr(sys, 'importers'):
# running as packed executable.
if '--register' in sys.argv[1:] or '--unregister' in sys.argv[1:]:
# --register and --unregister work as usual
import win32com.server.register
win32com.server.register.UseCommandLine(HelloWorld)
else:
# start the server.
from win32com.server import localserver
localserver.main()
else:
import win32com.server.register
win32com.server.register.UseCommandLine(HelloWorld)
#-------------------------------------------------------------------
This works just fine as a python module. I can run it, register the COM
server and use the Hello method in VBA code inside Excel.
However, I would like to make a DLL, register it, and be able to have the
same access to the COM server. I have not been able to do that so far.
I have the following simple setup.py module
#------------------------------------------------------------------------
from distutils.core import setup
import py2exe
setup(com_server = ["test"])
#------------------------------------------------------------------------
Using this with py2exe generates both test.dll and test.exe.
I can call test.exe with '--register' on the command line and the COM
server is registered.
However, when I use regsvr32 to register test.dll, the COM server does not
work with Excel. (although regsvr32 says that the DLL has been successfully
registered).
What am I missing?
appreciated :-)
I have a simple COM server (that I found on the internet):
#-------------------------------------------------------------------
import pythoncom
import sys
class HelloWorld:
#pythoncom.frozen = 1
if hasattr(sys, 'importers'):
_reg_class_spec_ = "__main__.HelloWorld"
_reg_clsctx_ = pythoncom.CLSCTX_LOCAL_SERVER
_reg_clsid_ = '{E3D5F332-F080-47B3-A319-A3A0E287E466}'
_reg_desc_ = "Python Test COM Server"
_reg_progid_ = "Python.TestServer"
_public_methods_ = ['Hello']
_public_attrs_ = ['softspace', 'noCalls']
_readonly_attrs_ = ['noCalls']
def __init__(self):
self.softspace = 1
self.noCalls = 0
def Hello(self, who):
self.noCalls = self.noCalls + 1
# insert "softspace" number of spaces
print "Hello" + " " * self.softspace + str(who)
return "Hello" + " " * self.softspace + str(who)
if __name__=='__main__':
import sys
if hasattr(sys, 'importers'):
# running as packed executable.
if '--register' in sys.argv[1:] or '--unregister' in sys.argv[1:]:
# --register and --unregister work as usual
import win32com.server.register
win32com.server.register.UseCommandLine(HelloWorld)
else:
# start the server.
from win32com.server import localserver
localserver.main()
else:
import win32com.server.register
win32com.server.register.UseCommandLine(HelloWorld)
#-------------------------------------------------------------------
This works just fine as a python module. I can run it, register the COM
server and use the Hello method in VBA code inside Excel.
However, I would like to make a DLL, register it, and be able to have the
same access to the COM server. I have not been able to do that so far.
I have the following simple setup.py module
#------------------------------------------------------------------------
from distutils.core import setup
import py2exe
setup(com_server = ["test"])
#------------------------------------------------------------------------
Using this with py2exe generates both test.dll and test.exe.
I can call test.exe with '--register' on the command line and the COM
server is registered.
However, when I use regsvr32 to register test.dll, the COM server does not
work with Excel. (although regsvr32 says that the DLL has been successfully
registered).
What am I missing?