MFC DLL的一些知識

2021-05-23 12:19:45 字數 1763 閱讀 7620

雖然能用dll實現的東西都可以用com來實現,但dll的優點確實不少,它更容易建立。本文將討論如何利用mfc來建立不同型別的dll,以及如何使用他們。

一、dll的不同型別

使用mfc可以生成兩種型別的dll:mfc擴充套件dll和常規dll。常規dll有可以分為動態連線和靜態連線。visual c++還可以生成win32 dll,但不是這裡討論的主要物件。

1、mfc擴充套件dll

每個dll都有某種型別的介面:變數、指標、函式、客戶程式訪問的類。它們的作用是讓客戶程式使用dll,mfc擴充套件dll可以有c++的介面。也就是它可以匯出c++類給客戶端。匯出的函式可以使用c++/mfc資料型別做引數或返回值,匯出乙個類時客戶端能建立類物件或者派生這個類。同時,在dll中也可以使用dll和mfc。

visual c++使用的mfc類庫也是儲存在乙個dll中,mfc擴充套件dll動態連線到mfc**庫的dll,客戶程式也必須要動態連線到mfc**庫的dll。(這裡談到的兩個dll,乙個是我們自己編寫的dll,乙個裝mfc類庫的dll)現在mfc**庫的dll也存在多個版本,客戶程式和擴充套件dll都必須使用相同版本的mfc**dll。所以為了讓mfc擴充套件dll能很好的工作,擴充套件dll和客戶程式都必須動態連線到mfc**庫dll。而這個dll必須在客戶程式執行的計算機上。

2、常規dll

使用mfc擴充套件dll的乙個問題就是dll僅能和mfc客戶程式一起工作,如果需要乙個使用更廣泛的dll,最好採用常規dll,因為它不受mfc的某些限制。常規dll也有缺點:它不能和客戶程式傳送指標或mfc派生類和物件的引用。一句話就是常規dll和客戶程式的介面不能使用mfc,但在dll和客戶程式的內部還是可以使用mfc。

當在常規dll的內部使用mfc**庫的dll時,可以是動態連線/靜態連線。如果是動態連線,也就是常規dll需要的mfc**沒有構建到dll中,這種情況有點和擴充套件dll類似,在dll執行的計算機上必須要mfc**庫的dll。如果是靜態連線,常規dll裡面已經包含了需要的mfc**,這樣dll的體積將比較大,但它可以在沒有mfc**庫dll的計算機上正常執行。

二、建立dll

編譯乙個dll時將建立兩個檔案.dll檔案和.lib檔案。首先將這兩個檔案複製到客戶程式專案的資料夾裡,這裡需要注意dll和客戶程式的版本問題,盡量使用相同的版本,都使用release或者都是debug版本。

接著就需要在客戶程式中設定lib檔案,開啟project settings--->link--->object/library modules中輸入lib的檔名和路徑。如:debug/sampledll.lib。除了dll和lib檔案外,客戶程式需要針對匯出類、函式、物件和變數的標頭檔案,現在進行匯入新增的關鍵字就是:_declspec(dllimport),如:

_declspec(dllimport) int myfunction(int);

_declspec(dllimport) int myint;

_declspec(dllimport) cmyclass object;

extern "c" _declspec(dllimport) int myfunction(int);

在有的時候為了匯入類,要把相應類的標頭檔案新增到客戶程式中,不同的是要修改類宣告的標誌:

class _declspec(dllimport) cmyclass,如果建立的是擴充套件dll,兩個位置都是:

class afx_ext_class cmyclass。

補充下,發現弄擴充套件dll的時候 ,只需要對class新增afx_ext_class 即可,預設這個類的所有成員函式均已經被匯出

const 的一些知識

收集了別人關於 const 的一些論述。const 的用法很多很靈活,稍不注意,就會有些莫名其妙的問題出現。甲 用於定義乙個不能被更改的變數的時候 const int i 10 i 的值不能被改變,否則報錯 void fun const int i 在函式中,i 的值不能被改變,即使他是個區域性變數...

SYBASE的一些知識

1。建立server時要注意頁大小 2k 4k。因為如果要重新恢復時需保證備份的與當前的一致,否則提示檔案頭不是4096或 2048byte一類的錯誤 2。建立adapter時主裝置大小一般不需要改。預設的即可,改太大時有可能裝不上。按預設大小建立即可。空間不夠可通過建立裝置來擴充套件。3。建立ad...

記憶體的一些知識

記憶體分類 從標準上可以分為 simm dimm 從外觀上可以分為 30線 64線 72線 100線 144線 168線 200線和卡式 插座式。從晶元類別上可以分為 fpm edo sdram rambus ddr 從整體效能上可以分為 普通 無任何特殊功能 帶校驗 自動檢錯 帶糾錯 自動糾錯 三...