問題:如何從DLL A.DLL採用對調用一個函數/調用時A.DLL依賴於另一個SXS-LIB(在我的情況MSVCR90.DLL) ?PInvoke的失敗,因爲DLL文件的依賴在短期其他SXS的dll
我想使用pinvoke在DLL中調用一個函數。 pinvoke本身對其他庫很好。從非託管C++調用DLL中的函數也可以很好地工作。
的問題是,該DLL具有駐留在一些SXS文件夾MSVCR90.DLL的參考。
在C++中使用LoadLibrary,可以像上述那樣使用庫。使用C#我不知道如何獲得加載的庫。我總是遇到MSVCR90.DLL在計算機上丟失的錯誤。
這是庫的外觀裝載這樣的:
[DllImport("C:\\work\\dllhell\\sample\\sample.dll",
EntryPoint = "sample", CallingConvention = CallingConvention.Cdecl)]
public static extern int sample();
當調用函數sample
,我只得到了以下錯誤:HRESULT:0x8007007E說,圖書館就不會被發現。實際上,SXS目錄中存在各種版本的庫。
我嘗試使用的Dependency Walker(取決於),但它也一直沒能找到該庫的正確版本,到目前爲止。
還有附帶包含以下條目庫清單:
下面的語句包括在清單內:
<assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8'
processorArchi tecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
請求的版本我的機器上存在,我使用VS 2010發佈了該庫的較新版本,但這不應該是一個問題,我猜。
我發現了很多討論類似問題的線索。我知道,我有一個依賴性問題,但我無處找到解決方案。我知道我缺少的依賴關係,我有一個清單,但應該爲C#做這件事嗎?不僅適用於非託管C++?
查看Windows應用程序事件日誌中的確切詳細信息。 –
感謝您的評論,很遺憾,我找不到任何新的細節。它只是顯示相同的錯誤,無論我是否嘗試加載一個不存在的DLL或對MSVCR90.DLL有依賴關係的DLL。錯誤表明在我試圖從DLL調用某個函數的位置出現了DllNotFoundException。 – user1034081
我從這裏看不到它。注意版本號。獲取該DLL部署。 –