6

我正在尝试在 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)

4

4 回答 4

4

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() 的导入应该可以工作。

于 2020-07-10T14:40:04.900 回答
4

这就是它对我的工作方式。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)
于 2018-07-26T01:52:38.107 回答
2

在 python 字符串"\"中是一个转义字符。要在 python 字符串中真正具有反斜杠字符,您需要添加第二个:"\\".

更改sys.path.append('C:\PathToDllFolder')sys.path.append('C:\\PathToDllFolder')

我不确定clr.AddReference('MyDll.dll'),没有 .dll 的版本应该可以工作:clr.AddReference('MyDll')

于 2018-05-16T15:59:26.757 回答
0

使用 dll 的绝对路径

import clr
clr.AddReference('C:\PathToDllFolder\MyDll.dll')
于 2020-05-14T03:52:29.733 回答