我有一個用C++編寫的需要由C#中的應用程序使用的DLL。它在Vista x86下工作良好,但在x64下無法加載。因此,我構建了一個x64版本的DLL,並檢測操作系統是x86還是x64,並使用適當的interop調用到相應的DLL。這在Vista x86下正常工作,但在Vista x64下,當它嘗試加載DLL時,出現「並排」錯誤。爲什麼它沒有加載它,以及可以採取什麼措施來糾正這個問題? (請讓我知道如果你需要更多的信息,我不知道什麼樣的信息是在故障排除這個問題相關。)無法在Vista中的C#應用程序中加載C++ DLL x64
1
A
回答
2
需要在客戶端計算機上安裝VC90 for x64的redist。就清單而言,我認爲你可以改變它來刪除processorArchitecture標籤。要麼這樣說,要麼讓它說「任何」。
3
一個最初的想法:你可以嘗試設置了「平臺目標」,在C#部分設置的項目改爲「x86」,看它是否能在Vista 64位機器上以32位兼容模式運行?有關的SxS錯誤
更多信息將是有益的 - 它可能會涉及到一些具體的未安裝運行時庫的版本(32位?)?
2
一些詳細信息,MadKeithV的答案:
在Windows x64時,一個進程可以啓動爲32位或64位進程。 64位進程只能加載64位dll,而32位進程只能加載32位dll。
如果您的.Net應用程序的平臺目標(例如在項目屬性中指定)設置爲「任何CPU」,則中間代碼將根據目標平臺編譯爲32位或64位代碼,即x64系統將生成64位代碼。
因此,代碼不能再加載一個32位的DLL。
如果您的代碼加載非託管程序集,則應始終明確指定目標平臺。
0
並排錯誤的一邊是更多的則可能是由你造成的C++ DLL清單文件設置或者他們沒有得到嵌入或者你選擇了不嵌入清單,並使用32位版本的清單。
簡單的解決方案是將你的C#應用程序標記爲x86的杯子,並與32位DLL一起運行。
1
如果沒有別的工作..你可以給Process Monitor一個嘗試。 它顯示你找不到哪個文件(依賴項)。這可能會讓你繼續前進。
相關問題
- 1. C++鏈接到python 3.2 x64應用程序無法加載
- 2. 無法加載DLL在C#
- 3. C#ClickOnce應用程序無法加載DLL
- 4. WPF應用程序無法加載C++ dll
- 5. C#中的PowerShell:無法加載DLL wldp.dll
- 6. C#AppDomain無法加載DLL
- 7. 從C#應用程序中的多個線程加載DLL
- 8. 在visual C++/qt應用程序中加載第三方dll
- 9. 無法在Windows 7 32位操作系統中的C#應用程序中加載C++ DLL
- 10. C#sqlite無法加載sqlite3.dll
- 11. 無法加載新的應用程序域中的C模塊
- 12. 在C++應用程序中使用DLL
- 13. 在.NET(C#)應用程序中禁用延遲的DLL加載功能
- 14. 程序集在C#應用程序中加載的地方?
- 15. 如何在運行時在C#應用程序中加載Dll(C++)
- 16. C DLL中不加載C#
- 17. C#.Net X64使用64位DLL時的應用程序崩潰
- 18. 無法寫入C++ Windows應用程序中的C++ dll項目中的文件
- 19. 無法在新的應用程序域中加載程序集
- 20. 在VS2012移植後無法在.net應用程序中加載C++/CLI橋接dll
- 21. C#使用liblas.dll(無法加載DLL)
- 22. C++ DLL和C#應用程序WPF:System.DllNotFoundException
- 23. 在asp.net中使用c + + dll - 異常:無法加載文件或程序集
- 24. C++應用程序無法初始化(0xc0000005),當使用C#DLL
- 25. Android應用程序中的C#.dll庫
- 26. 在64位過程中的64位DLL Vista失敗 - 無法加載DLL'dllname':無法找到指定的模塊
- 27. 在C++ Builder應用程序中動態加載C#.NET程序集
- 28. 從共享驅動器運行時,C#應用程序無法加載Matlab DLL?
- 29. C#無法從發佈DLL加載文件或程序集
- 30. 在C程序中的C++ dll
你的文章中有一個小錯誤 - 32位進程只加載32位(不是64位)的DLL。但是感謝帖子,這很有用,我實際上並不知道背景,只知道修正。 – 2008-12-04 14:57:43
謝謝,剛糾正錯誤! – 2008-12-04 15:09:43