关于python:使用.NET注册的com对象dll

using registered com object dll from .NET

我实现了一个 python com 服务器并使用 py2exe 工具生成了一个可执行文件和 dll。
然后我用regsvr32.exe注册了dll。我收到了注册成功的消息。然后我尝试在 .NET 中添加对该 dll 的引用。我浏览到 dll 位置并选择它,但我收到一个错误消息框,上面写着:无法添加对 dll 的引用,请确保该文件可访问并且它是有效的程序集或 COM 组件。服务器和设置脚本的代码添加在下面。
我想提一下,我可以将服务器作为 python 脚本运行,并使用后期绑定从 .net 使用它。
我有什么遗漏或做错了吗?我将不胜感激。

谢谢,
莎拉

你好.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import pythoncom

import sys

class HelloWorld:

    #pythoncom.frozen = 1
    if hasattr(sys, 'importers'):
        _reg_class_spec_ ="__main__.HelloWorld"
    _reg_clsctx_ = pythoncom.CLSCTX_LOCAL_SERVER
    _reg_clsid_ = pythoncom.CreateGuid()
    _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
        print"Hello" +"" * self.softspace + str(who)
        return"Hello" +"" * self.softspace + str(who)


if __name__=='__main__':
    import sys
    if hasattr(sys, 'importers'):

        # running as packed executable.

        if '--register' in sys.argv[1:] or '--unregister' in sys.argv[1:]:

            # --register and --unregister work as usual
            import win32com.server.register
            win32com.server.register.UseCommandLine(HelloWorld)
        else:

            # start the server.
            from win32com.server import localserver
            localserver.main()
    else:

        import win32com.server.register
        win32com.server.register.UseCommandLine(HelloWorld)

安装程序.py

1
2
3
4
from distutils.core import setup
import py2exe

setup(com_server = ["hello"])

我会回答我的问题以帮助任何可能有类似问题的人。我希望这会有所帮助。
我在 COM 选项卡上找不到我的服务器,因为 .NET (


线路:

1
_reg_clsid_ = pythoncom.CreateGuid()

每次调用此文件时都会创建一个新的 GUID。您可以在命令行上创建 GUID:

1
2
C:\\>python -c"import pythoncom; print pythoncom.CreateGuid()"
{C86B66C2-408E-46EA-845E-71626F94D965}

然后换行:

1
_reg_clsid_ ="{C86B66C2-408E-46EA-845E-71626F94D965}"

进行此更改后,我能够运行您的代码并使用以下 VBScript 对其进行测试:

1
2
Set obj = CreateObject("Python.TestServer")  
MsgBox obj.Hello("foo")

我没有方便的 MSVC 来查看这是否解决了"添加引用"问题。


如果你想使用一个注册的 Com 对象,你需要在 Add Reference 对话框的 Com 选项卡上找到它。您没有导航到 dll。