gpt4 book ai didi

.net - 使用 .NET 中注册的 com 对象 dll

转载 作者:太空宇宙 更新时间:2023-11-03 23:50:51 24 4
gpt4 key购买 nike

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

谢谢,莎拉

你好.py

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

from distutils.core import setup
import py2exe

setup(com_server = ["hello"])

最佳答案

行:

_reg_clsid_ = pythoncom.CreateGuid()

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

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

然后改变你的线路:

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

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

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

我手边没有 MSVC,无法查看这是否解决了“添加引用”问题。

关于.net - 使用 .NET 中注册的 com 对象 dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1083913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com