日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MFC模块的动态链接库DLL以及静态链接库LIB编译后的调用

發(fā)布時間:2024/9/21 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MFC模块的动态链接库DLL以及静态链接库LIB编译后的调用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
靜態(tài)鏈接庫LIB和動態(tài)鏈接庫DLL的區(qū)別,創(chuàng)建和示例??
1.什么是靜態(tài)連接庫,什么是動態(tài)鏈接庫
? 靜態(tài)鏈接庫與動態(tài)鏈接庫都是共享代碼的方式,如果采用靜態(tài)鏈接庫,則無論你愿不愿意,lib 中的指令都全部被直接包含在最終生成的 EXE 文件中了。但是若使用 DLL,該 DLL 不必被包含在最終 EXE 文件中,EXE 文件執(zhí)行時可以“動態(tài)”地引用和卸載這個與 EXE 獨立的 DLL 文件。
靜態(tài)鏈接庫和動態(tài)鏈接庫的另外一個區(qū)別在于靜態(tài)鏈接庫中不能再包含其他的動態(tài)鏈接庫或者靜態(tài)庫,而在動態(tài)鏈接庫中還可以再包含其他的動態(tài)或靜態(tài)鏈接庫。 若是想在MFC應(yīng)用程序中調(diào)用動態(tài)鏈接庫DLL,或靜態(tài)鏈接庫LIB,又或者是動態(tài)鏈接庫DLL中要調(diào)用靜態(tài)鏈接庫LIB的接口,建議在編譯鏈接時,所有模塊(exe,dll,lib)要么都是MFC作為共享的DLL,要么都MFC作為靜態(tài)鏈接庫,或者都用標(biāo)準(zhǔn)的Windows庫,總之可執(zhí)行程序和DLL或LIB中的調(diào)用應(yīng)保持一致。 ? ? 靜態(tài)鏈接庫與靜態(tài)鏈接庫調(diào)用規(guī)則總體比較如下:??
對于靜態(tài)鏈接庫(比較簡單):
首先,靜態(tài)鏈接庫的使用需要庫的開發(fā)者提供生成庫的.h頭文件和.lib文件。

生成庫的.h頭文件中的聲明格式如下:
extern "C" 函數(shù)返回類型 函數(shù)名(參數(shù)表);
在調(diào)用程序的.cpp源代碼文件中如下:
#include "..\lib.h"
#pragma comment(lib,"..\\debug\\libTest.lib")??
//指定與靜態(tài)庫一起鏈接

第二,因為靜態(tài)鏈接庫是將全部指令都包含入調(diào)用程序生成的EXE文件中。因此如果用的是靜態(tài)鏈接庫,那么也就不存在“導(dǎo)出某個函數(shù)提供給用戶使用”的情況,要想用就得全要!要不就都別要!:)

對于動態(tài)鏈接庫:
動態(tài)鏈接庫的使用需要庫的開發(fā)者提供生成的.lib文件和.dll文件。或者只提供dll文件。
首先我們必須先注意到DLL內(nèi)的函數(shù)分為兩種:??
(1)DLL 導(dǎo)出函數(shù),可供應(yīng)用程序調(diào)用;??
(2)DLL 內(nèi)部函數(shù),只能在 DLL 程序使用,應(yīng)用程序無法調(diào)用它們。
因此調(diào)用程序若想調(diào)用DLL中的某個函數(shù)就要以某種形式或方式指明它到底想調(diào)用哪一個函數(shù)

?

?

而對于一個工程模塊,我們可以將其編譯成動態(tài)鏈接庫DLL的文件形式,也可以編譯成靜態(tài)鏈接庫LIB的文件。

若想條件編譯的話,可以定義一個標(biāo)識然后編譯的時候設(shè)置這個標(biāo)識一起編譯。

[cpp]?view plaincopy print?
  • #define???_AFXDLL???
  • ??
  • #ifndef??_AFXDLL??
  • ??
  • ?#pragma?commit(?lib,?"我的靜態(tài)庫.lib");??
  • #else??
  • ???#pragma?commit(?lib,?"我的動態(tài)庫.lib");??
  • #endif??

  • 若是有需要,想將原來以動態(tài)鏈接庫DLL編譯的模塊,轉(zhuǎn)換成靜態(tài)鏈接庫LIB的形式,只需要將工程里編譯選項改成以靜態(tài)庫方式編譯就行。同時修改下DLL中的導(dǎo)出函數(shù)的聲明為普通函數(shù)聲明。

    ?

    同時注意,應(yīng)用程序中調(diào)用靜態(tài)鏈接庫.lib時,只需要隱式的(即工程配置項里或用#pragma comment)引入.lib文件,因為靜態(tài)鏈接庫的lib就是其本身,所以這樣我們就能直接調(diào)用靜態(tài)鏈接庫里的接口了。【他跟動態(tài)鏈接庫DLL在開發(fā)角度上,不同的是,DLL需要引入的是鏈接文件.lib,讓編譯器能找到DLL中的接口,其他在使用上都一樣】?

    在這提醒下,

    靜態(tài)鏈接庫文件.lib與動態(tài)鏈接庫DLL編譯時產(chǎn)生的.lib鏈接文件是不一樣的,即便它們在Windows中呈現(xiàn)的文件格式是一樣的,動態(tài)鏈接文件.lib里面僅僅只是保存了一些動態(tài)鏈接導(dǎo)出函數(shù)的聲明,有心的朋友,可以比較下它們的大小,你會發(fā)現(xiàn),動態(tài)鏈接文件.lib跟靜態(tài)鏈接庫文件.lib比起來小很多。

    總結(jié)

    以上是生活随笔為你收集整理的MFC模块的动态链接库DLL以及静态链接库LIB编译后的调用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。