COM-сервер - это просто часть программного обеспечения (DLL или исполняемый файл), которая будет принимать удаленные вызовы процедур (RPC) по определенному протоколу. Часть протокола гласит, что сервер должен иметь уникальный идентификатор, хранящийся в реестре Windows.
В нашем случае это означает, что вы «зарегистрировали» сервер, который не существует. Таким образом, ошибка (компонент не найден).
Итак, должно быть что-то вроде этого (как обычно, это непроверенный код!):
import pythoncom
class HelloWorld:
_reg_clsctx_ = pythoncom.CLSCTX_LOCAL_SERVER
_reg_clsid_ = "{B83DD222-7750-413D-A9AD-01B37021B24B}"
_reg_desc_ = "Python Test COM Server"
_reg_progid_ = "Python.TestServer"
_public_methods_ = ['Hello']
_public_attrs_ = ['softspace', 'noCalls']
_readonly_attrs_ = ['noCalls']
def __init__(self):
self.softspace = 1
self.noCalls = 0
def Hello(self, who):
self.noCalls = self.noCalls + 1
# insert "softspace" number of spaces
return "Hello" + " " * self.softspace + str(who)
if __name__ == '__main__':
if '--register' in sys.argv[1:] or '--unregister' in sys.argv[1:]:
import win32com.server.register
win32com.server.register.UseCommandLine(HelloWorld)
else:
# start the server.
from win32com.server import localserver
localserver.serve('B83DD222-7750-413D-A9AD-01B37021B24B')
Затем вы должны запустить из командной строки (при условии, что скрипт называется HelloWorldCOM.py):
HelloWorldCOM.py --register
HelloWorldCOM.py
Класс HelloWorld - это фактическая реализация сервера. Он предоставляет один метод (Hello) и пару атрибутов, один из которых доступен только для чтения.
Первой командой вы регистрируете сервер; со вторым вы запускаете его, и затем он становится доступным для использования из других приложений.