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 对象,你需要在 Add Reference 对话框的 Com 选项卡上找到它。您没有导航到 dll。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/268005.html