System.DllNotFoundException 問題分析與解決

來源:互聯網
上載者:User

 最近做C++大作業,介面是用C#構建,而程式處理核心使用native C++寫的DLL,整個程式用VS2010編譯,最初在我們三人的電腦開發測試時發現一切運行正常,但是當發給別人啟動並執行時候,當WPF做的介面調用C++編寫的DLL的時候,就會彈出System.DllNotFoundException錯誤,我把DLL放在System32和exe所在目錄下發現問題依舊。

     翻了很多中文網站似乎沒有找到解決方案...後來在某外國網站看到,出現這種原因的可能性有:

1. DLL函數是否有正確匯出。這個我在有的人的電腦可以運行,這說明函數已經正確匯出了。

2. 匯入的方法是否正確。

        [DllImport( "GDIPlusLibrary.dll", EntryPoint="ImageEffects" )]

        public static extern IntPtr ImageEffects( IntPtr bitmap, ref Parameter param );

 

匯出方法如上,在開發人員的電腦可以運行,所以上述問題不予考慮。

3. DLL有沒有依賴什麼其他DLL,仔細看了C++代碼,沒有調用什麼其他DLL。

那麼問題究竟在何處?後來按大家一貫思路,用Depends查看DLL需要什麼運行庫,竟然發現DLL需要msvcr100.dll!我明明沒有調用它,也沒選擇MFC,為什麼會這樣。

如果出現這種情況,那麼這個DLL啟動並執行電腦需要安裝 VC 2010 運行庫,後來用VS 2008重新編譯了這個DLL,現在只要裝了VC++ 2008 Runtime Library的電腦都不會出錯了。

總結:

     出現匪夷所思的DLL無法載入的問題,看看是否是DLL需要其他DLL,儘管你沒調用其他DLL,但是不保證你的編譯器偷偷幫你產生了調用其他DLL的代碼。出現上述問題,可以嘗試安裝VC運行庫,應該就可以解決問題!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.