"DllRegitserServer not found"错误python_com_server



这是我的com服务器代码(文件名为"python_com_server.py"(:

 import pythoncom, win32com.server.register
 import win32traceutil
 class Python_COM_Server_4:
    _public_methods_ = ['MachineInfo']
    _reg_progid_ = "PythonCOMServer_4"
    _reg_clsid_ = '{3B4B18D9-BE2C-43A5-B08C-A89B4334DFA1}'
    def MachineInfo(self, item=None):
        msg = "Your operating system: " 
        print (msg)
if __name__ == '__main__' or __name__ == 'python_com_server':
    win32com.server.register.UseCommandLine (Python_COM_Server_4)

这是我 setup.py:

from distutils.core import setup
import py2exe
import sys
class Target:
    def __init__(self, **kw):
        self.__dict__.update(kw)
        # for the version info resources (Properties -- Version)
        self.version = "0.0.1"
        self.company_name = "my company"
        self.name = "my com server name"
my_com_server_target = Target(
    description = "my com server",
    # use module name for win32com exe/dll server
    modules = ["python_com_server"],
    # specify which type of com server you want (exe and/or dll)
    create_exe = True,
    create_dll = False
    )
setup(
    name="my_com_server",
    # the following two parameters embed support files within exe/dll file
    options={"py2exe": {"bundle_files": 1, }},
    zipfile=None,
    version="0.0.1",
    description="my com server",
    # author, maintainer, contact go here:
    author="First Last",
    author_email="some_name@some_company.com",
    # packages=["dir"],
    com_server=[my_com_server_target]
    )

我在cmd行上运行以下命令:

python setup.py py2exe

并在dist文件夹中生成" python_com_server.exe"。

然后,我尝试使用以下方法注册它:

regsvr32 distpython_com_server.exe

但我收到此错误:

"模块"dist\pythion_com_server.exe"已加载,但找不到入口点 DllRegisterServer。

我在Windows Server 2012上使用python 2.7 32位。

我错过了什么?

为了注册 .exe 的 COM 服务器,而不是使用 RegSvr32.exe,使用/regserver 参数执行.exe自身,如下所示。

python_com_server.exe /regserver

RegSvr32.exe 是用于注册 .dll 和 .ocx 的 COM 服务器的工具。
DllRegisterServer/DllUnregsiterServer 等是它的入口点,COM 服务器.dll和 .ocx 必须具有它们。

另一方面,.exe的 COM 服务器必须使用自己的代码注册。
由于.exe的COM服务器没有DllRegisterServer/DllUnregsiterServer等,因此尝试使用RegSvr32.exe注册失败。

例如,在 VC ++ 的 MFC 中,它由 .exe 的 InitInstance(( 中的 UpdateRejistry(( 或 UpdateRegistryAll(( 执行。

在 Python 的 win32com

中,它对应于你编写的"win32com.server.register.UseCommandLine(("。

ctypes 具有相同的功能,并且在"主程序"中有一个解释 使用 ctypes 实现 COM 服务器。

相关内容

  • 没有找到相关文章

最新更新