请教 Python 怎么调用 C#的 dll

2018-01-20 10:25:20 +08:00
 ge2009

例有下一个用 C#写的 test.dll 里面有 test 的 NameSpace, Class1 的类,一个 returnstr 的方法

我的方法是:

import clr
test = clr.AddReference("test")
print test.returstr

这样的结果返回说

AttributeError: 'RuntimeAssembly' object has no attribute 'returstr'

问题 1:

网上也找了一些资料,看了 Python.Net 的资料好像也是这么写的,方法名应该也没错,比较奇怪,求解

问题 2: 有没有什么工具可以看到 dll 里面的方法名称?

附件 test.dll 地址: https://pan.baidu.com/s/1dvge54

7661 次点击
所在节点    Python
12 条回复
lynnX
2018-01-20 10:30:10 +08:00
问题一 不知道 问题二 .Net Reflector 或者 ILSpy
ge2009
2018-01-20 11:02:31 +08:00
@lynnX 嗯,问题 2 我也刚安装了,现在就是问题一比较奇怪,已经确认了方法名应该都没错的.
Athrob
2018-01-20 11:46:32 +08:00
Class1 呢?
ge2009
2018-01-20 12:23:30 +08:00
@Athrob 他们 Python.net 的文档里面好像是直接调就可以了,试过先 import Class1 好像也还是一样报错
iilxy
2018-01-20 13:13:20 +08:00
.net 的要用 ironpy 来调用吧
asuraa
2018-01-20 14:31:06 +08:00
楼上正解 使用 ironpython 遗憾的是只支持 py2
haddy
2018-01-20 14:34:54 +08:00
试试
`import clr
clr.AddReference("test")
import test
print test.returstr
` ?
haddy
2018-01-20 14:39:37 +08:00
呃,不好意思,我弄错了。不要在意我刚才的回复。
haddy
2018-01-20 14:44:15 +08:00
用 clr.System.Reflection.Assembly.LoadFile
haddy
2018-01-20 14:52:19 +08:00
haddy
2018-01-20 15:18:39 +08:00
囧,不好意思。就我现在搜集到的信息,DLL 的目标版本需为 .NET 4.0+,不然要设置某个环境变量。这个原因也有可能。然后除了上面的方法,似乎还可以 clr.AddReferenceToFileAndPath,这样相比 AddReference 就不用手动将路径添加到 sys.path 里。但具体是否可行我也说不清楚……
ge2009
2018-01-20 15:24:50 +08:00
@iilxy
@luodaoyi
感谢二位,已经解决了确实是用 ironpython 可以处理,原先的时候把它和 Python For .net 搞混了.
同时也带话 @hadyy 哈.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/424433

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX