Re: [python-win32] Welcome to the "python-win32" mailing list (Digest mode)

2022-11-08 Thread Dennis Lee Bieber
On Tue, 08 Nov 2022 15:53:19 -, Brian Johnson 
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"    # .    
>_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
wlfr...@ix.netcom.comhttp://wlfraed.microdiversity.freeddns.org/

___
python-win32 mailing list
python-win32@python.org
https://mail.python.org/mailman/listinfo/python-win32


Re: [python-win32] Welcome to the "python-win32" mailing list (Digest mode)

2022-11-08 Thread Mark Hammond
pythoncom.CLSCTX_LOCAL_SERVER means this COM object will be hosted by 
python.exe - so COM/office is going to look up the registry to get a 
command-line to execute. As written, that will just re-register the COM 
server - so yes, you do want that `localserver.serve()`. The default of 
CLSCTX_INPROC_SERVER generally doesn't need an explicit serve() as 
python.exe isn't used - the DLLs are loaded directly into office - but 
that probably isn't going to help in a concrete way (ie, the underlying 
problem would probably exist in both cases)


Assuming it still fails with that: it might be that this command is 
failing for reasons - eg, if you installed pywin32 via pip and didn't 
run the pywin32_postinstall script I can imagine things going wrong. The 
.exe installer runs that for you though.


You mention you found the entry in the registry - does executing that 
command in a "clean" environment (ie, without any special environment 
variables etc, from a directory unrelated to python - ie, trying to 
emulate the same environment office itself runs in) work OK? If it fails 
importing modules etc, that's probably the same failure when COM tries 
to start it.


You mention "running code as Administrator" - is Office and this 
registration code running as the exact same user?


I've currently no environments with Office available, so can't really 
test at the moment.


HTH,

Mark

On 9/11/2022 2:53 am, Brian Johnson wrote:

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 object

  * I 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, Brian

*Context*:

  * Windows 10, python 3.10, Office 365, running python code as
Administrator
  * I 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 sys

importpythoncom
importwin32com.server.register


classPythonUtilities:
"""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"
# .
_reg_class_spec_= "SimpleCOMServer.PythonUtilities"

defSplitString(self, val, separator=None):
"""Split a string by a separator."""
# if separator is not None:
#     return val.split(separator)
# else:
#     return val.split()

ifseparatorisnotNone:
returnstr(val).split(str(separator))
else:
returnstr(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
     Next
End Sub


___
python-win32 mailing list
python-win32@python.org
https://mail.python.org/mailman/listinfo/python-win32


___
python-win32 mailing list
python-win32@python.org
https://mail.python.org/mailman/listinfo/python-win32


Re: [python-win32] Welcome to the "python-win32" mailing list (Digest mode)

2022-11-08 Thread Brian Johnson

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"    # . 
   _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___
python-win32 mailing list
python-win32@python.org
https://mail.python.org/mailman/listinfo/python-win32