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 def Hello(self, who):
if __name__==‘__main__’: # running as packed executable. if ‘–register’ in sys.argv[1:] or ‘–unregister’ in sys.argv[1:]: # –register and –unregister work as usual # start the server. import win32com.server.register |
安装程序.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 选项卡上找到我的服务器。
- 如果您希望 COM 服务器显示在该选项卡中,我认为您需要编写和注册一个类型库。我不知道 pythoncom 是否可以生成一个,但是您可以通过为您的服务器编写一个 IDL 并使用 MIDL 编译它来做到这一点。
- 顺便说一句,如果您在此处找不到答案,请尝试 python-win32 列表:mail.python.org/mailman/listinfo/python-win32 这是获取有关 python/win 内容的答案的好地方。
如果你想使用一个注册的 Com 对象,你需要在 Add Reference 对话框的 Com 选项卡上找到它。您没有导航到 dll。
- 感谢您的回答,我一开始是这样做的,但在 Com 选项卡中没有找到我的服务器,所以我想我会导航到它。
来源:https://www.codenong.com/1083913/