如何让python加载混合模式.dlls引用的.NET .dll?

时间:2010-06-04 00:06:59

标签: python windows

我有一个python .pyd,它是一个混合模式C ++ DLL。 DLL加载正常并加载非托管C ++ dll没有问题,但是当它尝试加载托管C ++ dll引用的.NET dll时,它失败并显示以下错误消息:

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly '...'

将这些.NET dll复制到包含pythod_d.exe的目录允许.NET库成功加载,但这不是一个好的长期解决方案。是否需要设置环境变量或python_d.exe的某些命令行选项才能解决我的问题?

请注意,不接受使用IronPython或Python .NET。

2 个答案:

答案 0 :(得分:1)

我想我已经解决了这个问题。程序集加载不使用SetDllDirectory()设置的路径,看起来Python调用此函数。通过注册事件AppDomain.AssemblyResolve()的委托,我可以捕获失败的DLL的名称,将其附加到从GetDllDirectory()获取的目录,然后自己手动加载程序集。

答案 1 :(得分:0)

我对此有一点经验。我认为它与http://effbot.org/pyfaq/is-a-pyd-file-the-same-as-a-dll.htm中所述的路径和初始化问题有关。