我有一個Excel工作簿,它調用我在C++中編寫的測試DLL。 DLL的路徑在VBA中被硬編碼。該DLL使用的唯一文件是stdlib和iostream。VBA調用C++ DLL - 錯誤48(文件未找到)
在我的機器上它工作。在其他幾個辦公室機器上工作。但是,當我嘗試通過Excel調用DLL的其餘部分時,我得到錯誤48 - 找不到文件。
我的理解是錯誤53是文件丟失;錯誤48是缺少依賴關係。我已經使用了依賴關係的步行者,並沒有發現任何問題。
但是我發現的是,如果我在一臺機器上安裝Visual Studio,那麼在安裝完Excel文件/ DLL後,有90%的可能性。在10%不起作用的情況下,我重新啓動並重新運行Visual Studio安裝,選擇'修復',安裝完成後,Excel/DLL組合工作。所以基本上安裝Visual Studio允許DLL加載Excel。如果我卸載Visual Studio的DLL仍然正常工作。顯然這意味着這些機器上缺少某些東西,但我不知道是什麼 - 我試過單獨安裝所有顯示在「程序」下的部分,比如大多數當前的.net框架,visual C++ re-可分發等等,並且它不起作用。唯一可行的是安裝Visual Studio本身。 我不確定如何繼續,因爲要求用戶安裝5gig ISO並安裝開發人員環境並不是很理想。
啊哈,我發現了這個問題。事實證明,它需要2個DLL文件 - msvcr120.dll和msvc120.dll。我在我的System32文件夾中有這兩個文件,但沒有在我的SysWOW64文件夾中。只要我填充該文件夾,然後DLL開始工作。
我在google上發現了很多與'相同'問題但沒有答案的線程,所以如果遇到同樣的問題,我會建議使用依賴關係walker並確保這兩個DLL在兩個系統文件夾中都是安全的(儘管我懷疑System32只需要64位DLL,而SysWOW64需要32位DLL)。