[python-win32] comtypes.server.register is case sensitive to filenames, see registry PythonClass.

Mark Hammond skippy.hammond at gmail.com
Fri Apr 20 08:06:14 CEST 2012


On 19/04/2012 11:32 PM, jeffwelch at earthlink.net wrote:
> I was having intermittent problems creating a Python COM object that I am using as a test/learning exercise. What I finally noticed was that when I was command line registering the object I was not consistent in typing the name of the python file.
>
>
> Executing the DOS command line:
>      python TestMsgBox.py -regserver
> Yields the following registry entry:
>      HKEY_CLASSES_ROOT\CLSID\{a4c0208f-8888-11e1-ac67-b8ac6f92cf9d}\InprocServer32
>          PythonClass = "TestMsgBox.TestMsgBox"
>
>
> Executing the DOS command line:
>      python TestMsgBox.py -regserver

Is the above correct, or did you mean to say "python testmsgbox.py" there?

If you did then I can guess how comtypes would come to that conclusion - 
python itself will think the filename is "testmsgbox.py".  pywin32 has 
code specifically to work around this - in win32com\server\register.py 
there is:

moduleName = os.path.splitext(win32api.FindFiles(sys.argv[0])[0][8])[0]

which will give back the actual filename rather than the one specified. 
  I'd see if you can find a comtypes specific mailing-list and ask the 
question...

...

>      class TestMsgBox( comtypes.IUnknown ):
>          _case_insensitive_ = True

Again, I know almost zero about comtypes, but I wouldn't expect the 
above to have any bearing on the case of the module filename - I'd guess 
that this controls whether the method/property names should be 
considered case sensitive (ie, whether yourobject.Foo() and 
yourobject.foo()) both call the same method.

HTH,

Mark

>          _reg_threading_ = "Both"
>          _reg_progid_ = "TestMsgBoxLib.TestMsgBox"
>          _reg_desc_ = "MessageBox sample for testing"
>          _reg_clsctx_ = comtypes.CLSCTX_INPROC_SERVER | comtypes.CLSCTX_LOCAL_SERVER
>          _reg_clsid_ = "{a4c0208f-8888-11e1-ac67-b8ac6f92cf9d}"
>
>      if __name__ == "__main__":
>          from comtypes.server.register import UseCommandLine
>          UseCommandLine(TestMsgBox)
>
> I don't know if this was intended behavior but I had not seen it documented.
> _______________________________________________
> python-win32 mailing list
> python-win32 at python.org
> http://mail.python.org/mailman/listinfo/python-win32
>




More information about the python-win32 mailing list