On Tue, 08 Nov 2022 15:53:19 -0000, Brian Johnson <[email protected]>
declaimed the following:
>Hi python-win32 community.I am trying to get this toy COM server (code is
>below) to work. It is the sample code from "Python Programming for Win32" and
>adapted for python 3.10. When I test it using VBA in Word, I get this
>error:Run-time error '429':ActiveX component can't create objectI don't know
>if I am missing one a required _reg_param_ that is needed for Win10.Is there
>is an extra step I need to take to register/run the COM server?I don't know if
>win32com.server.localserver.serve [] is necessary.Does the class need an
>__init__ method to do something?I appreciate any help or insight into getting
>this to work. Thank you!Sincerely, BrianContext:Windows 10, python 3.10,
>Office 365, running python code as AdministratorI have verified the python
>class works in python only.I tried registering/unregistering using both
>options shown below. Both appear to work - no error messages. I can find info
>about the COM Server using Regedit.I tried the --debug flag, but it didn't
>provide any
>verbosity.I'm learning COM, but the info about it is sparse and generally very
>abstract.Python script, SimpleCOMServer.py:"""A sample COM server - almost as
>small as they come."""# import sysimport pythoncomimport
>win32com.server.registerclass PythonUtilities: """We expose a simple method
>in a Python COM object.""" _reg_clsctx_ = pythoncom.CLSCTX_LOCAL_SERVER
>_public_methods_ = ["SplitString"] _reg_progid_ = "PythonDemos.Utilities"
> _reg_desc_ = "PythonDemos Test COM Server" # NEVER copy the following ID
> # Use "print(pythoncom.CreateGUID())" to made a new on. _reg_clsid_ =
>"{819E8336-00B5-4025-979A-46EE1EF411B7}" # for Python 3.7+ #
>https://stackoverflow.com/questions/1054849/consuming-python-com-server-from-net
> _reg_verprogid_ = "PythonDemos.Utilities.1" # <filename>.<classname>
>_reg_class_spec_ = "SimpleCOMServer.PythonUtilities" def SplitString(self,
>val, separator=None): """Split a string by a separator.""" # if
>separator is
>not None: # return val.split(separator) # else: #
>return val.split() if separator is not None: return
>str(val).split(str(separator)) else: return
>str(val).split()# Add code so that when this script is run by python e.e, it
>self-registers.if __name__ == "__main__": print("Registering COM
>server...") win32com.server.register.UseCommandLine(PythonUtilities) #
>if "--register" in sys.argv[1:] or "--unregister" in sys.argv[1:]: #
>win32com.server.register.UseCommandLine(PythonUtilities) # else: # #
>start the server. # from win32com.server.localserver import serve #
> serve(["{819E8336-00B5-4025-979A-46EE1EF411B7}"])Word VBA macro:Sub
>TestPython() Dim PythonUtils As Object Set PythonUtils =
>CreateObject("PythonDemos.Utilities") response =
>PythonUtils.SplitString("Hello from VB") For Each Item In response
>MsgBox Item NextEnd Sub
(UGH! what type of line endings is your client sending?)
32-bit or 64-bit? Office 365 may be 32-bit applications, and will need
a 32-bit Python COM server.
--
Wulfraed Dennis Lee Bieber AF6VN
[email protected] http://wlfraed.microdiversity.freeddns.org/
_______________________________________________
python-win32 mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-win32