我正在为挂钩到COM服务器对象的Windows程序进行扩展。我想用Python来做这件事,据我所知,我可以使用Py2exe从comtypes服务器创建一个DLL。
对于测试,我编写了一个简单的类,它调用通过RPC公开的print方法。我为该类创建了一个COM接口,注册了它,从另一个Python程序中实例化了COM对象,并调用了print方法。它有效。
(我已经创建了一个存储库供参考:https://github.com/jakogut/python-inproc_server)
但是,当我使用Py2exe从我的COM服务器创建DLL,并尝试使用regsvr32注册该DLL时,弹出窗口指出:
模块" RemotePrint.dll"已加载,但对DllRegisterServer的调用失败,错误代码为0x80040201
到目前为止,我已尝试从管理员命令提示符运行,清除comtypes gen缓存并重新创建DLL,使用Dependency Walker分析运行时库依赖关系(它冻结/崩溃,并且没有提供有用的信息),并在另一台机器上运行。
基于我使用comtypes寄存器功能注册代码时我的代码应该正常运行的事实,我假设这不会因为我的设置不正确而无法作为DLL工作,或者使用Py2exe和Python 3进行诡计。
答案 0 :(得分:1)
似乎问题是Python解释器崩溃,因为它无法从comtypes.gen导入RemotePrintLib。添加' comtypes.gen'为distutils工作的包含选项!
有助于诊断这一点的是win32traceutil。