2010-06-04 32 views
2

我有一個python .pyd,它是一個混合模式的C++ DLL。該DLL加載罰款,並加載非託管C++的dll沒有問題,但是,當它試圖加載的失敗與此錯誤消息的託管C++動態鏈接庫中引用的.NET的DLL:如何獲得python加載混合模式.dlls引用的.NET .dlls?

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

複製這些.NET的DLL到包含pythod_d.exe的目錄允許.NET庫成功加載,但這不是一個好的長期解決方案。是否有一個環境變量,我必須設置或一些命令行選項python_d.exe,這將解決我的問題?

請注意,使用IronPython或Python .NET是不可接受的。

回答

1

我想我已經解決了這個問題。程序集加載不使用SetDllDirectory()設置的路徑,它看起來像Python調用這個函數。通過註冊事件AppDomain.AssemblyResolve()的代理,我可以捕獲失敗的dll的名稱,並將其附加到從GetDllDirectory()獲取的目錄中,然後手動加載該程序集。