From: Tejovathi P <tej...@gm...> - 2008-01-08 11:09:54
|
Hi All, I have a Python COM server. I need to deploy it on various sytems. When I run the COM server from python its showing an output " Registered : sample.lib" If I try to use the COM obj from a VB client like: obj = CreateObject("sample.lib") Its working fine without any errors Now I am trying to convert this COM server to an exe through py2exe and after I run the exe, I am getting the same output " Registered : sample.lib" But If I try to use the COM obj from a VB client like obj = CreateObject("sample.lib") A console pops up saying " Registered : sample.lib" and VB application hangs there. Its throwing a VB error that "ActiveX object cannot be created......etc etc" Here is my sample COM server and py2exe setup file *testCOM.py * import win32com.client import os.path import shutil from win32api import Sleep import string import os import sys import pythoncom class FirstEx: _reg_clsid_ = "{A6DE9DF8-5EBF-48E6-889E-C71CB84CFF2C}" pythoncom.frozen = 1 if hasattr(sys, 'importers'): # In the py2exe-packed version, specify the module.class # to use. In the python script version, python is able # to figure it out itself. _reg_class_spec_ = "__main__.FirstEx" _reg_desc_ = "My first COM server" _reg_progid_ = "SAMPLE.Lib" _public_methods_ = ['init', 'Version'] _public_attrs_ = ['softspace', 'noCalls'] _readonly_attrs_ = ['noCalls'] _reg_clsctx_ = pythoncom.CLSCTX_LOCAL_SERVER def __init__(self): self.softspace = 1 self.noCalls = 0 def Version(self): self.noCalls = self.noCalls + 1 # insert "softspace" number of spaces return "Version: 0.0.1" 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(FirstEx) else: # start the server. from win32com.server import localserver localserver.main() else: import win32com.server.register win32com.server.register.UseCommandLine(FirstEx) Here is my setup file: #Start here from distutils.core import setup import py2exe setup(options = {"py2exe": {"compressed": 1, "optimize": 2, "ascii": 1, "bundle_files": 1}}, zipfile = None, com_server = ["win32com.servers.interp"], console = ["testCOM.py"]) #End here Here is my VB code: Sub subRoutine() Dim connection As Object Dim returnvalue1 As String Dim returnvalue2 As String Dim flag3 As Boolean Set connection = CreateObject("SAMPLE.Lib") returnvalue1 = connection.Version() MsgBox (returnvalue1) End Sub The non exe version of the COM server ie. directlly running the testCOM.py registers the library properly and in the VB application, the message box displays the version as 0.0.1. But, after I create the EXE file using the setup.py file and run it, it registers the library. When I run the VB application, it hangs at the line Set connection = CreateObject("SAMPLE.Lib") and displays. " ACTIVEX cannot create the object" Any suggestions please.... |
From: Mark H. <mha...@sk...> - 2008-01-09 01:11:58
|
The lines: com_server =3D ["win32com.servers.interp"],=20 console =3D ["testCOM.py"]) are incorrect. the 'console=3D' line is creating an executable, but you probably just need a .dll. The com_server line indicates which module should be turned into a COM DLL, but you are still specifying the = pywin32 sample object. Try just: com_server =3D ['testCOM'] and remove the 'console=3D' line. After running py2exe, execute = 'regsvr32 testCOM.dll' to register the object in that DLL. HTH, Mark ----------------- From: py2...@li... [mailto:py2...@li...] On Behalf Of = Tejovathi P Sent: Tuesday, 8 January 2008 10:10 PM To: py2...@li... Subject: [Py2exe-users] Regarding COM server and py2exe Hi All,=20 I have a Python COM server. I need to deploy it on various sytems. When = I run the COM server from=20 python its showing an output " Registered : sample.lib"=20 If I try to use the COM obj from a VB client like:=20 obj =3D CreateObject("sample.lib")=20 Its working fine without any errors=20 Now I am trying to convert this COM server to an exe through py2exe and after I run the exe, I am=20 getting the same output " Registered : sample.lib"=20 But If I try to use the COM obj from a VB client like=20 obj =3D CreateObject("sample.lib")=20 A console pops up saying " Registered : sample.lib" and VB application=20 hangs there. Its throwing a VB error that "ActiveX object cannot be created......etc etc"=20 Here is my sample COM server and py2exe setup file=20 =A0 testCOM.py=20 import win32com.client=20 import os.path=20 import shutil=20 from win32api import Sleep=20 import string=20 import os=20 import sys=20 import pythoncom=20 class FirstEx:=20 =A0 =A0 _reg_clsid_ =3D "{A6DE9DF8-5EBF-48E6-889E-C71CB84CFF2C}"=20 =A0 =A0 pythoncom.frozen =3D 1=20 =A0 =A0 if hasattr(sys, 'importers'):=20 =A0 =A0 =A0 =A0 # In the py2exe-packed version, specify the module.class = =A0 =A0 =A0 =A0 # to use. In the python script version, python is able=20 =A0 =A0 =A0 =A0 # to figure it out itself.=20 =A0 =A0 =A0 =A0 _reg_class_spec_ =3D "__main__.FirstEx"=20 =A0 =A0 _reg_desc_ =3D "My first COM server"=20 =A0 =A0 _reg_progid_ =3D "SAMPLE.Lib"=20 =A0 =A0 _public_methods_ =3D ['init', 'Version']=20 =A0 =A0 _public_attrs_ =3D ['softspace', 'noCalls']=20 =A0 =A0 _readonly_attrs_ =3D ['noCalls']=20 =A0 =A0 _reg_clsctx_ =3D pythoncom.CLSCTX_LOCAL_SERVER=20 =A0 =A0 def __init__(self):=20 =A0 =A0 =A0 =A0 self.softspace =3D 1=20 =A0 =A0 =A0 =A0 self.noCalls =3D 0=20 =A0 =A0 def Version(self):=20 =A0 =A0 =A0 =A0 self.noCalls =3D self.noCalls + 1=20 =A0 =A0 =A0 =A0 # insert "softspace" number of spaces=20 =A0 =A0 =A0 =A0 return "Version: 0.0.1"=20 if __name__=3D=3D'__main__':=20 =A0 =A0 import sys=20 =A0 =A0 if hasattr(sys, 'importers'):=20 =A0 =A0 =A0 =A0 # running as packed executable.=20 =A0 =A0 =A0 =A0 if '--register' in sys.argv[1:] or '--unregister' in=20 sys.argv[1:]:=20 =A0 =A0 =A0 =A0 # --register and --unregister work as usual=20 =A0 =A0 =A0 =A0 =A0 =A0 import win32com.server.register=20 =A0 =A0 =A0 =A0 =A0 =A0 win32com.server.register.UseCommandLine(FirstEx) = =A0 =A0 =A0 =A0 else:=20 =A0 =A0 =A0 =A0 =A0 =A0 # start the server.=20 =A0 =A0 =A0 =A0 =A0 =A0 from win32com.server import localserver=20 =A0 =A0 =A0 =A0 =A0 =A0 localserver.main()=20 =A0 =A0 else:=20 =A0 =A0 =A0 =A0 import win32com.server.register=20 =A0 =A0 =A0 =A0 win32com.server.register.UseCommandLine(FirstEx)=20 =A0Here is my setup file:=20 #Start here=20 from distutils.core import setup=20 import py2exe=20 setup(options =3D {"py2exe": {"compressed": 1,=20 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "optimize": 2,=20 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "ascii": 1,=20 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "bundle_files": 1}}, = =A0 =A0 zipfile =3D None,=20 =A0 =A0 com_server =3D ["win32com.servers.interp"],=20 =A0 =A0 console =3D ["testCOM.py"])=20 #End here=20 Here is my VB code:=20 Sub subRoutine()=20 Dim connection As Object=20 Dim returnvalue1 As String=20 Dim returnvalue2 As String=20 Dim flag3 As Boolean=20 Set connection =3D CreateObject("SAMPLE.Lib")=20 returnvalue1 =3D connection.Version()=20 MsgBox (returnvalue1)=20 End Sub=20 The non exe version of the COM server ie. directlly running the=20 testCOM.py registers the library properly and=20 in the VB application, the message box displays the version as 0.0.1.=20 But, after I create the EXE file using the setup.py file and run it,=20 it registers the library.=20 When I run the VB application, it hangs at the line=20 Set connection =3D CreateObject("SAMPLE.Lib")=20 and displays. " ACTIVEX cannot create the object"=20 Any suggestions please....=20 |
From: Tejovathi P <tej...@gm...> - 2008-01-09 08:04:29
|
Hi Mark, Thanks for your reply. I changed the py2exe script as per your suggestion an was able to generate the dll instead of exe. I was also able to register it using regsvr32 command at command prompt. Any idea , now how should start using the functionalities in this dll in a VB/C# application? Because CreateObject("Sample.lib") is throwing errors in the same old manner, even after the dll is registered On 1/9/08, Mark Hammond <mha...@sk...> wrote: > > The lines: > > com_server = ["win32com.servers.interp"], > console = ["testCOM.py"]) > > are incorrect. the 'console=' line is creating an executable, but you > probably just need a .dll. The com_server line indicates which module > should be turned into a COM DLL, but you are still specifying the pywin32 > sample object. > > Try just: > > com_server = ['testCOM'] > > and remove the 'console=' line. After running py2exe, execute 'regsvr32 > testCOM.dll' to register the object in that DLL. > > HTH, > > Mark > > ----------------- > > From: py2...@li... > [mailto:py2...@li...] On Behalf Of Tejovathi > P > Sent: Tuesday, 8 January 2008 10:10 PM > To: py2...@li... > Subject: [Py2exe-users] Regarding COM server and py2exe > > Hi All, > I have a Python COM server. I need to deploy it on various sytems. When I > run the COM server from > python its showing an output " Registered : sample.lib" > If I try to use the COM obj from a VB client like: > obj = CreateObject("sample.lib") > Its working fine without any errors > Now I am trying to convert this COM server to an exe through py2exe and > after I run the exe, I am > getting the same output " Registered : sample.lib" > But If I try to use the COM obj from a VB client like > obj = CreateObject("sample.lib") > A console pops up saying " Registered : sample.lib" and VB application > hangs there. Its throwing a VB error that "ActiveX object cannot be > created......etc etc" > Here is my sample COM server and py2exe setup file > > testCOM.py > import win32com.client > import os.path > import shutil > from win32api import Sleep > import string > import os > import sys > import pythoncom > class FirstEx: > _reg_clsid_ = "{A6DE9DF8-5EBF-48E6-889E-C71CB84CFF2C}" > pythoncom.frozen = 1 > if hasattr(sys, 'importers'): > # In the py2exe-packed version, specify the module.class > # to use. In the python script version, python is able > # to figure it out itself. > _reg_class_spec_ = "__main__.FirstEx" > _reg_desc_ = "My first COM server" > _reg_progid_ = "SAMPLE.Lib" > _public_methods_ = ['init', 'Version'] > _public_attrs_ = ['softspace', 'noCalls'] > _readonly_attrs_ = ['noCalls'] > _reg_clsctx_ = pythoncom.CLSCTX_LOCAL_SERVER > def __init__(self): > self.softspace = 1 > self.noCalls = 0 > def Version(self): > self.noCalls = self.noCalls + 1 > # insert "softspace" number of spaces > return "Version: 0.0.1" > 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(FirstEx) > else: > # start the server. > from win32com.server import localserver > localserver.main() > else: > import win32com.server.register > win32com.server.register.UseCommandLine(FirstEx) > Here is my setup file: > #Start here > from distutils.core import setup > import py2exe > setup(options = {"py2exe": {"compressed": 1, > "optimize": 2, > "ascii": 1, > "bundle_files": 1}}, > zipfile = None, > com_server = ["win32com.servers.interp"], > console = ["testCOM.py"]) > #End here > Here is my VB code: > Sub subRoutine() > Dim connection As Object > Dim returnvalue1 As String > Dim returnvalue2 As String > Dim flag3 As Boolean > Set connection = CreateObject("SAMPLE.Lib") > returnvalue1 = connection.Version() > MsgBox (returnvalue1) > End Sub > The non exe version of the COM server ie. directlly running the > testCOM.py registers the library properly and > in the VB application, the message box displays the version as 0.0.1. > But, after I create the EXE file using the setup.py file and run it, > it registers the library. > When I run the VB application, it hangs at the line > Set connection = CreateObject("SAMPLE.Lib") > and displays. " ACTIVEX cannot create the object" > Any suggestions please.... > > |
From: Mark H. <mha...@sk...> - 2008-01-09 08:15:27
|
First you should check the registry that the object has indeed been registered correctly via the name you expect, and points at your generated DLL. If that is all OK, it is likely that some other error is happening as the object is loaded. You will probably need to arrange for your script to be registered in "debug" mode (which means passing "debug=1" as a keyword arg to win32com.server.RegisterClasses()), then starting win32traceutil to view debug output. You should see some output as regsvr32 runs, and also as VB attempts, but fails, to load your object. Mark. From: py2...@li... [mailto:py2...@li...] On Behalf Of Tejovathi P Sent: Wednesday, 9 January 2008 7:05 PM To: Mark Hammond Cc: py2...@li... Subject: Re: [Py2exe-users] Regarding COM server and py2exe Hi Mark, Thanks for your reply. I changed the py2exe script as per your suggestion an was able to generate the dll instead of exe. I was also able to register it using regsvr32 command at command prompt. Any idea , now how should start using the functionalities in this dll in a VB/C# application? Because CreateObject("Sample.lib") is throwing errors in the same old manner, even after the dll is registered On 1/9/08, Mark Hammond <mha...@sk...> wrote: The lines: com_server = ["win32com.servers.interp"], console = ["testCOM.py "]) are incorrect. the 'console=' line is creating an executable, but you probably just need a .dll. The com_server line indicates which module should be turned into a COM DLL, but you are still specifying the pywin32 sample object. Try just: com_server = ['testCOM'] and remove the 'console=' line. After running py2exe, execute 'regsvr32 testCOM.dll' to register the object in that DLL. HTH, Mark ----------------- From: py2...@li... [mailto: <mailto:py2...@li...> py2...@li...] On Behalf Of Tejovathi P Sent: Tuesday, 8 January 2008 10:10 PM To: py2...@li... Subject: [Py2exe-users] Regarding COM server and py2exe Hi All, I have a Python COM server. I need to deploy it on various sytems. When I run the COM server from python its showing an output " Registered : sample.lib" If I try to use the COM obj from a VB client like: obj = CreateObject("sample.lib") Its working fine without any errors Now I am trying to convert this COM server to an exe through py2exe and after I run the exe, I am getting the same output " Registered : sample.lib" But If I try to use the COM obj from a VB client like obj = CreateObject("sample.lib") A console pops up saying " Registered : sample.lib" and VB application hangs there. Its throwing a VB error that "ActiveX object cannot be created......etc etc" Here is my sample COM server and py2exe setup file testCOM.py import win32com.client import os.path import shutil from win32api import Sleep import string import os import sys import pythoncom class FirstEx: _reg_clsid_ = "{A6DE9DF8-5EBF-48E6-889E-C71CB84CFF2C}" pythoncom.frozen = 1 if hasattr(sys, 'importers'): # In the py2exe-packed version, specify the module.class # to use. In the python script version, python is able # to figure it out itself. _reg_class_spec_ = "__main__.FirstEx" _reg_desc_ = "My first COM server" _reg_progid_ = " SAMPLE.Lib" _public_methods_ = ['init', 'Version'] _public_attrs_ = ['softspace', 'noCalls'] _readonly_attrs_ = ['noCalls'] _reg_clsctx_ = pythoncom.CLSCTX_LOCAL_SERVER def __init__(self): self.softspace = 1 self.noCalls = 0 def Version(self): self.noCalls = self.noCalls + 1 # insert "softspace" number of spaces return "Version: 0.0.1" 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(FirstEx) else: # start the server. from win32com.server import localserver localserver.main() else: import win32com.server.register win32com.server.register.UseCommandLine(FirstEx) Here is my setup file: #Start here from distutils.core import setup import py2exe setup(options = {"py2exe": {"compressed": 1, "optimize": 2, "ascii": 1, "bundle_files": 1}}, zipfile = None, com_server = ["win32com.servers.interp "], console = ["testCOM.py"]) #End here Here is my VB code: Sub subRoutine() Dim connection As Object Dim returnvalue1 As String Dim returnvalue2 As String Dim flag3 As Boolean Set connection = CreateObject("SAMPLE.Lib") returnvalue1 = connection.Version() MsgBox (returnvalue1) End Sub The non exe version of the COM server ie. directlly running the testCOM.py registers the library properly and in the VB application, the message box displays the version as 0.0.1. But, after I create the EXE file using the setup.py file and run it, it registers the library. When I run the VB application, it hangs at the line Set connection = CreateObject("SAMPLE.Lib") and displays. " ACTIVEX cannot create the object" Any suggestions please.... |
From: Tejovathi P <tej...@gm...> - 2008-01-09 08:51:30
|
In the registry entry of the COM dll, in the subkey , LocalServer32, the entry which I found is *"C:\WINNT\system32\regsvr32.exe /Automate"* Is this a correct entry?, because no where I am seeing the path to the DLL On 1/9/08, Mark Hammond <mha...@sk...> wrote: > > First you should check the registry that the object has indeed been > registered correctly via the name you expect, and points at your generated > DLL. > > > > If that is all OK, it is likely that some other error is happening as the > object is loaded. You will probably need to arrange for your script to be > registered in "debug" mode (which means passing "debug=1" as a keyword arg > to win32com.server.RegisterClasses()), then starting win32traceutil to > view debug output. You should see some output as regsvr32 runs, and also as > VB attempts, but fails, to load your object. > > > > Mark. > > > > *From:* py2...@li... [mailto: > py2...@li...] *On Behalf Of *Tejovathi P > *Sent:* Wednesday, 9 January 2008 7:05 PM > *To:* Mark Hammond > *Cc:* py2...@li... > *Subject:* Re: [Py2exe-users] Regarding COM server and py2exe > > > > Hi Mark, > > > > Thanks for your reply. I changed the py2exe script as per your suggestion > an was able to generate the dll instead of exe. > > I was also able to register it using regsvr32 command at command prompt. > > > > Any idea , now how should start using the functionalities in this dll in a > VB/C# application? > > > > Because CreateObject("Sample.lib") is throwing errors in the same old > manner, even after the dll is registered > > > > On 1/9/08, *Mark Hammond* <mha...@sk...> wrote: > > The lines: > > com_server = ["win32com.servers.interp"], > console = ["testCOM.py "]) > > are incorrect. the 'console=' line is creating an executable, but you > probably just need a .dll. The com_server line indicates which module > should be turned into a COM DLL, but you are still specifying the pywin32 > sample object. > > Try just: > > com_server = ['testCOM'] > > and remove the 'console=' line. After running py2exe, execute 'regsvr32 > testCOM.dll' to register the object in that DLL. > > HTH, > > Mark > > ----------------- > > From: py2...@li... > [mailto: py2...@li...] On Behalf Of > Tejovathi P > Sent: Tuesday, 8 January 2008 10:10 PM > To: py2...@li... > Subject: [Py2exe-users] Regarding COM server and py2exe > > Hi All, > I have a Python COM server. I need to deploy it on various sytems. When I > run the COM server from > python its showing an output " Registered : sample.lib" > If I try to use the COM obj from a VB client like: > obj = CreateObject("sample.lib") > Its working fine without any errors > Now I am trying to convert this COM server to an exe through py2exe and > after I run the exe, I am > getting the same output " Registered : sample.lib" > But If I try to use the COM obj from a VB client like > obj = CreateObject("sample.lib") > A console pops up saying " Registered : sample.lib" and VB application > hangs there. Its throwing a VB error that "ActiveX object cannot be > created......etc etc" > Here is my sample COM server and py2exe setup file > > testCOM.py > import win32com.client > import os.path > import shutil > from win32api import Sleep > import string > import os > import sys > import pythoncom > class FirstEx: > _reg_clsid_ = "{A6DE9DF8-5EBF-48E6-889E-C71CB84CFF2C}" > pythoncom.frozen = 1 > if hasattr(sys, 'importers'): > # In the py2exe-packed version, specify the module.class > # to use. In the python script version, python is able > # to figure it out itself. > _reg_class_spec_ = "__main__.FirstEx" > _reg_desc_ = "My first COM server" > _reg_progid_ = " SAMPLE.Lib" > _public_methods_ = ['init', 'Version'] > _public_attrs_ = ['softspace', 'noCalls'] > _readonly_attrs_ = ['noCalls'] > _reg_clsctx_ = pythoncom.CLSCTX_LOCAL_SERVER > def __init__(self): > self.softspace = 1 > self.noCalls = 0 > def Version(self): > self.noCalls = self.noCalls + 1 > # insert "softspace" number of spaces > return "Version: 0.0.1" > 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(FirstEx) > else: > # start the server. > from win32com.server import localserver > localserver.main() > else: > import win32com.server.register > win32com.server.register.UseCommandLine(FirstEx) > Here is my setup file: > #Start here > from distutils.core import setup > import py2exe > setup(options = {"py2exe": {"compressed": 1, > "optimize": 2, > "ascii": 1, > "bundle_files": 1}}, > zipfile = None, > com_server = ["win32com.servers.interp "], > console = ["testCOM.py"]) > #End here > Here is my VB code: > Sub subRoutine() > Dim connection As Object > Dim returnvalue1 As String > Dim returnvalue2 As String > Dim flag3 As Boolean > Set connection = CreateObject("SAMPLE.Lib") > returnvalue1 = connection.Version() > MsgBox (returnvalue1) > End Sub > The non exe version of the COM server ie. directlly running the > testCOM.py registers the library properly and > in the VB application, the message box displays the version as 0.0.1. > But, after I create the EXE file using the setup.py file and run it, > it registers the library. > When I run the VB application, it hangs at the line > Set connection = CreateObject("SAMPLE.Lib") > and displays. " ACTIVEX cannot create the object" > Any suggestions please.... > > > |
From: Mark H. <mha...@sk...> - 2008-01-09 09:18:35
|
No, its not correct - but it may be a hang-over from the older version with 'console' specified - delete it. There should be no LocalServer32, but a InprocServer32 entry pointing to your DLL. Please ensure you are using pywin32 build 210, and check that the unmodified sample works OK for you, then try and narrow down what differs. Mark From: Tejovathi P [mailto:tej...@gm...] Sent: Wednesday, 9 January 2008 7:52 PM To: Mark Hammond Cc: py2...@li... Subject: Re: [Py2exe-users] Regarding COM server and py2exe In the registry entry of the COM dll, in the subkey , LocalServer32, the entry which I found is "C:\WINNT\system32\regsvr32.exe /Automate" Is this a correct entry?, because no where I am seeing the path to the DLL On 1/9/08, Mark Hammond <mha...@sk...> wrote: First you should check the registry that the object has indeed been registered correctly via the name you expect, and points at your generated DLL. If that is all OK, it is likely that some other error is happening as the object is loaded. You will probably need to arrange for your script to be registered in "debug" mode (which means passing "debug=1" as a keyword arg to win32com.server.RegisterClasses()), then starting win32traceutil to view debug output. You should see some output as regsvr32 runs, and also as VB attempts, but fails, to load your object. Mark. From: py2...@li... <mailto:py2...@li...> [mailto:py2...@li...] On Behalf Of Tejovathi P Sent: Wednesday, 9 January 2008 7:05 PM To: Mark Hammond Cc: py2...@li... Subject: Re: [Py2exe-users] Regarding COM server and py2exe Hi Mark, Thanks for your reply. I changed the py2exe script as per your suggestion an was able to generate the dll instead of exe. I was also able to register it using regsvr32 command at command prompt. Any idea , now how should start using the functionalities in this dll in a VB/C# application? Because CreateObject("Sample.lib") is throwing errors in the same old manner, even after the dll is registered On 1/9/08, Mark Hammond <mha...@sk...> wrote: The lines: com_server = ["win32com.servers.interp"], console = ["testCOM.py "]) are incorrect. the 'console=' line is creating an executable, but you probably just need a .dll. The com_server line indicates which module should be turned into a COM DLL, but you are still specifying the pywin32 sample object. Try just: com_server = ['testCOM'] and remove the 'console=' line. After running py2exe, execute 'regsvr32 testCOM.dll' to register the object in that DLL. HTH, Mark ----------------- From: py2...@li... [mailto: py2...@li... <mailto:py2...@li...> ] On Behalf Of Tejovathi P Sent: Tuesday, 8 January 2008 10:10 PM To: py2...@li... Subject: [Py2exe-users] Regarding COM server and py2exe Hi All, I have a Python COM server. I need to deploy it on various sytems. When I run the COM server from python its showing an output " Registered : sample.lib" If I try to use the COM obj from a VB client like: obj = CreateObject("sample.lib") Its working fine without any errors Now I am trying to convert this COM server to an exe through py2exe and after I run the exe, I am getting the same output " Registered : sample.lib" But If I try to use the COM obj from a VB client like obj = CreateObject("sample.lib") A console pops up saying " Registered : sample.lib" and VB application hangs there. Its throwing a VB error that "ActiveX object cannot be created......etc etc" Here is my sample COM server and py2exe setup file testCOM.py import win32com.client import os.path import shutil from win32api import Sleep import string import os import sys import pythoncom class FirstEx: _reg_clsid_ = "{A6DE9DF8-5EBF-48E6-889E-C71CB84CFF2C}" pythoncom.frozen = 1 if hasattr(sys, 'importers'): # In the py2exe-packed version, specify the module.class # to use. In the python script version, python is able # to figure it out itself. _reg_class_spec_ = "__main__.FirstEx" _reg_desc_ = "My first COM server" _reg_progid_ = " SAMPLE.Lib" _public_methods_ = ['init', 'Version'] _public_attrs_ = ['softspace', 'noCalls'] _readonly_attrs_ = ['noCalls'] _reg_clsctx_ = pythoncom.CLSCTX_LOCAL_SERVER def __init__(self): self.softspace = 1 self.noCalls = 0 def Version(self): self.noCalls = self.noCalls + 1 # insert "softspace" number of spaces return "Version: 0.0.1" 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 (FirstEx) else: # start the server. from win32com.server import localserver localserver.main() else: import win32com.server.register win32com.server.register.UseCommandLine(FirstEx) Here is my setup file: #Start here from distutils.core import setup import py2exe setup(options = {"py2exe": {"compressed": 1, "optimize": 2, "ascii": 1, "bundle_files": 1}}, zipfile = None, com_server = ["win32com.servers.interp "], console = ["testCOM.py"]) #End here Here is my VB code: Sub subRoutine() Dim connection As Object Dim returnvalue1 As String Dim returnvalue2 As String Dim flag3 As Boolean Set connection = CreateObject("SAMPLE.Lib") returnvalue1 = connection.Version() MsgBox (returnvalue1) End Sub The non exe version of the COM server ie. directlly running the testCOM.py registers the library properly and in the VB application, the message box displays the version as 0.0.1. But, after I create the EXE file using the setup.py file and run it, it registers the library. When I run the VB application, it hangs at the line Set connection = CreateObject("SAMPLE.Lib") and displays. " ACTIVEX cannot create the object" Any suggestions please.... |