1. 程式人生 > >MFC的使用——在共享DLL中使用MFC、在靜態庫中使用MFC

MFC的使用——在共享DLL中使用MFC、在靜態庫中使用MFC

前言

我們在使用Microsoft Visual Studio軟體(也就是我們常常說的VS)時,其中專案屬性中有一項叫做“MFC的使用”,裡面包含有不同的設定,會影響我們所編寫的程式的使用,今天我就遇到了這個情況,我們一起來總結一下,避免犯下相同的錯誤。

內容

昨天寫了一個小程式,使用的是MFC應用程式的工程,工具的版本為VS2013,工程引數都是預設的,其中有一項設定叫做“MFC的使用”,預設設定是“在共享DLL中使用MFC”,我雖然看到了但是沒有放在心上,編碼期間解決了一個MFC使用多位元組字符集報錯的問題,此處不展開,後續再表,就這樣程式編寫完成,非常完美!交給了一個叫做“小閃電”的使用者,然後她懷著萬分激動地心情拿到公司電腦一使用,結果報錯了!!!

這裡寫圖片描述

“無法啟動此程式,因為計算機中丟失mfc120.dll。嘗試重新安裝改程式以解決此問題。”,看到這個問題我首先想到的就是動態連結庫的事情,因為我使用的是VS2013正好使用的是12.0版本的庫檔案,所以說應該是目標機上沒有這個庫,當然可以手動下載這個庫檔案,新增至“C:\Windows\System32”目錄,但是在程式開發工程中,你無法要求所有的使用者都會這樣做,只能從自身找解決方法了。

當然我也仔細查了一下這個叫做“MFC的使用”的引數,它其實包括3個選項,具體如截圖:

這裡寫圖片描述

  1. 使用標準Windows庫   
  2. 在共享DLL中使用MFC    
  3. 在靜態庫中使用MFC

這三種當然有著不同的意義:

  • 第一種顧名思義,是使用WINDOWS SDK API庫,不使用MFC類。話說一個MFC應用程式不使用MFC類是個什麼情況,一開始我也想不通,後來我新建了一個MFC應用程式的工程,然後把這這項引數填成這一種,然後程式編譯失敗,具體錯誤如下圖,這就說明問題了,如果是MFC工程必須選擇第二項或者第三項,而第一項“使用標準Windows庫”是為非MFC工程準備的(不知理解是否正確,請大神指教)。

這裡寫圖片描述

  • 第二種指的是打包時一些MFC的DLL的內容沒有被包含在EXE檔案中,所以EXE檔案較小,但是執行時要求系統中要有相關的DLL檔案。這就是我的程式一開始選擇的選項,要求目標計算機中至少要包含“mfc120.dll”庫檔案,否則無法使用。

  • 第三種是將DLL中的相關程式碼寫進EXE檔案中,檔案較大,但是可以在沒有相關DLL的機器上執行。個人感覺程式測試期間使用這個選項應該比較好,起碼可以保證程式的正常執行。

總結

  • MFC應用程式的工程,關於“MFC的使用”屬性,應該選擇“在共享DLL中使用MFC”或者“在靜態庫中使用MFC”。
  • “使用標準Windows庫” 選項只能用在非MFC工程中,如果用在MFC工程會導致程式碼編譯報錯。
  • “在共享DLL中使用MFC” 選項生成的程式可執行檔案比較小,但是要求目標機器必須裝有必要的庫檔案。
  • “在靜態庫中使用MFC” 選項生成的程式可執行檔案幾乎所有的Windows都可以執行,但是程式較大一些,其中包含必要的庫檔案,可以基本保證在別的機器上正常執行。