使用 Py2exe 的 ctypes_com_server setup 关键字和 Python 3
Using Py2exe's ctypes_com_server setup keyword with Python 3
我正在为挂接到 COM 服务器对象的 Windows 程序进行扩展。我想使用 Python 来执行此操作,据我了解,我可以使用 Py2exe 从 comtypes 服务器创建 DLL。
为了进行测试,我编写了一个简单的 class 调用通过 RPC 公开的打印方法。我为那个 class 创建了一个 COM 接口,注册了它,从另一个 Python 程序实例化了 COM 对象,并调用了 print 方法。有效。
(我在这里创建了一个存储库以供参考:https://github.com/jakogut/python-inproc_server)
但是,当我使用 Py2exe 从我的 COM 服务器创建 DLL,并尝试使用 regsvr32 注册该 DLL 时,弹出窗口显示:
The module "RemotePrint.dll" was loaded but the call to DllRegisterServer failed with error code 0x80040201
到目前为止,我已经尝试 运行 从管理员命令提示符,清除 comtypes gen 缓存并重新创建 DLL,使用 Dependency Walker(froze/crashed 和没有提供有用的信息),并在另一台机器上 运行。
基于我的代码在使用 comtypes 注册函数注册时可以正常工作的事实,我假设这不能作为 DLL 工作,因为我的设置不当,或者是一个怪癖Py2exe 和 Python 3.
问题似乎出在 Python 解释器崩溃,因为它无法从 comtypes.gen 导入 RemotePrintLib。将 'comtypes.gen' 添加到 distutils 的 includes 选项有效!
win32traceutil 有助于诊断这一点。
我正在为挂接到 COM 服务器对象的 Windows 程序进行扩展。我想使用 Python 来执行此操作,据我了解,我可以使用 Py2exe 从 comtypes 服务器创建 DLL。
为了进行测试,我编写了一个简单的 class 调用通过 RPC 公开的打印方法。我为那个 class 创建了一个 COM 接口,注册了它,从另一个 Python 程序实例化了 COM 对象,并调用了 print 方法。有效。
(我在这里创建了一个存储库以供参考:https://github.com/jakogut/python-inproc_server)
但是,当我使用 Py2exe 从我的 COM 服务器创建 DLL,并尝试使用 regsvr32 注册该 DLL 时,弹出窗口显示:
The module "RemotePrint.dll" was loaded but the call to DllRegisterServer failed with error code 0x80040201
到目前为止,我已经尝试 运行 从管理员命令提示符,清除 comtypes gen 缓存并重新创建 DLL,使用 Dependency Walker(froze/crashed 和没有提供有用的信息),并在另一台机器上 运行。
基于我的代码在使用 comtypes 注册函数注册时可以正常工作的事实,我假设这不能作为 DLL 工作,因为我的设置不当,或者是一个怪癖Py2exe 和 Python 3.
问题似乎出在 Python 解释器崩溃,因为它无法从 comtypes.gen 导入 RemotePrintLib。将 'comtypes.gen' 添加到 distutils 的 includes 选项有效!
win32traceutil 有助于诊断这一点。