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 Yields the following registry entry: HKEY_CLASSES_ROOT\CLSID\{a4c0208f-8888-11e1-ac67-b8ac6f92cf9d}\InprocServer32 PythonClass = "testmsgbox.TestMsgBox" I created the smallest sample I could to reproduce it. import comtypes class TestMsgBox( comtypes.IUnknown ): _case_insensitive_ = True _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 [hidden email] http://mail.python.org/mailman/listinfo/python-win32 |
On 19/04/2012 11:32 PM, [hidden email] 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 > [hidden email] > http://mail.python.org/mailman/listinfo/python-win32 > _______________________________________________ python-win32 mailing list [hidden email] http://mail.python.org/mailman/listinfo/python-win32 |
Free forum by Nabble | Edit this page |