我正在尝试导入并在python中使用DLL。因此我使用的是pythonnet。
import sys
import clr
sys.path.append('C:\PathToDllFolder')
clr.AddReference('MyDll.dll')
但是代码会产生以下错误:
Traceback (most recent call last): File "E:\NET\NET_test.py", line 6, in <module> clr.AddReference('MyDll.dll') System.IO.FileNotFoundException: Unable to find assembly 'MyDll.dll'. bei Python.Runtime.CLRModule.AddReference(String name)
DLL的目标运行时为:v4.0.30319
有没有办法找出导致失败的原因以及如何解决?
(如果需要,我也可以提供DLL)
答案 0 :(得分:2)
在python字符串中"\"
是一个转义字符。要在python字符串中使用真正的反斜杠字符,您需要添加第二个字符:"\\"
。
将sys.path.append('C:\PathToDllFolder')
更改为sys.path.append('C:\\PathToDllFolder')
。
我不确定clr.AddReference('MyDll.dll')
,没有.dll的版本应该有效:clr.AddReference('MyDll')
答案 1 :(得分:2)
这就是我的工作方式。 DLL位于'/SDK/dll/some_net64.dll' 注意:不需要.dll扩展名。
import os, sys, clr
dll_dir = './SDK/dll/'
dllname = 'some_net64'
path = r'%s%s' % (dll_dir, dllname)
sys.path.append(os.getcwd())
clr.AddReference(path)
答案 2 :(得分:1)
clr.AddReference()很难描述错误。 找出导入失败原因的更好方法是使用它。
#use this section of code for troubleshooting
from clr import System
from System import Reflection
full_filename = r'C:\foo\bar\MyDll.dll'
Reflection.Assembly.LoadFile(full_filename) #this elaborate the error in details
一种可能性是系统知道您的DLL是从其他地方下载的(甚至是Dropbox同步计数),并且不允许您使用该DLL文件。在这种情况下,您可以从 https://docs.microsoft.com/en-us/sysinternals/downloads/streams 并运行此命令以从DLL文件中删除所有这些标志。
stream -d MyDll.dll
然后,使用clr.AddReference()进行的导入应该可以工作。
答案 3 :(得分:0)
使用dll的绝对路径
import clr
clr.AddReference('C:\PathToDllFolder\MyDll.dll')