Visual C++中調(diào)用DLL實(shí)現(xiàn)數(shù)據(jù)加密
發(fā)布時(shí)間:2008/8/23 0:00:00 訪問(wèn)次數(shù):863
摘 要:介紹了動(dòng)態(tài)鏈接庫(kù)這種模塊復(fù)用方法及在vc中對(duì)它的調(diào)用,并給出了一個(gè)通過(guò)復(fù)用來(lái)實(shí)現(xiàn)數(shù)據(jù)加密的具體實(shí)例。
引言
模塊化思想貫穿于軟件工程各個(gè)發(fā)展階段,模塊復(fù)用是構(gòu)建大系統(tǒng)的一種重要思想。模塊復(fù)用方法有:函數(shù)、函數(shù)庫(kù)、動(dòng)態(tài)鏈接庫(kù)、com。其都是基于模塊化的基本思想。函數(shù)是最簡(jiǎn)單的模塊化思想,也是后面方法的基礎(chǔ),甚至是一個(gè)應(yīng)用程序的基礎(chǔ)。函數(shù)庫(kù)是函數(shù)的組合,一般將一些功能相似的函數(shù)放在一起作為函數(shù)庫(kù),這種函數(shù)庫(kù)通常叫做靜態(tài)庫(kù),其鏈接方式是靜態(tài)的。com即組件對(duì)象模型,是一種集成技術(shù),可以使程序在運(yùn)行時(shí)把各種不相關(guān)的軟件程序混合在一起,而不必考慮這些不相關(guān)的程序是用什么語(yǔ)言編寫(xiě)的,它也是一種標(biāo)準(zhǔn)或者稱為協(xié)議,負(fù)責(zé)將一個(gè)軟件模塊和另一個(gè)軟件連接起來(lái)。動(dòng)態(tài)鏈接庫(kù)dll(dynamic link library)是一個(gè)可以被其它應(yīng)用程序共享的程序模塊,其中封裝了一些可以被共享的例程和資源,其鏈接方式是動(dòng)態(tài)的。動(dòng)態(tài)鏈接庫(kù)文件的擴(kuò)展名一般是dll,也有可能是fon、sys和dry,它和可執(zhí)行文件(.exe)非常相似,區(qū)別在于dll中雖然包含了可執(zhí)行代碼卻不能單獨(dú)執(zhí)行,而應(yīng)由windows應(yīng)用程序直接或間接調(diào)用。windows操作系統(tǒng)包含大量動(dòng)態(tài)鏈接庫(kù),其中最主要的是kernel32.dll、user32.dll、gdi32.dll 。
dll的調(diào)用
調(diào)用dll,首先需要將dll文件映像到用戶進(jìn)程的地址空間中,然后才能進(jìn)行函數(shù)調(diào)用,這個(gè)函數(shù)和進(jìn)程內(nèi)部一般函數(shù)的調(diào)用方法相同。windows提供了兩種將dll映像到進(jìn)程地址空間的方法:
1、隱式的加載時(shí)鏈接
這種方法需要dll工程經(jīng)編譯產(chǎn)生的lib文件,此文件中包含了dll允許應(yīng)用程序調(diào)用的所有函數(shù)的列表,當(dāng)鏈接器發(fā)現(xiàn)應(yīng)用程序調(diào)用了lib文件列出的某個(gè)函數(shù),就會(huì)在應(yīng)用程序的可執(zhí)行文件的文件映像中加入一些信息,這些信息指出了包含這個(gè)函數(shù)的dll文件的名字。當(dāng)這個(gè)應(yīng)用程序運(yùn)行時(shí),也就是它的可執(zhí)行文件被操作系統(tǒng)產(chǎn)生映像文件時(shí),系統(tǒng)會(huì)查看這個(gè)映像文件中關(guān)于dll的信息,然后將這個(gè)dll文件映像到進(jìn)程的地址空間。
系統(tǒng)通過(guò)dll文件的名稱,試圖加載這個(gè)文件到進(jìn)程地址空間時(shí),它尋找dll 文件的路徑按照先后順序如下:
·程序運(yùn)行時(shí)的目錄,即可執(zhí)行文件所在的目錄;
·當(dāng)前程序工作目錄
·系統(tǒng)目錄:對(duì)于windows95/98來(lái)說(shuō),可以調(diào)用getsystemdirectory函數(shù)來(lái)得到,對(duì)于windowsnt/2000來(lái)說(shuō),指的是32位windows的系統(tǒng)目錄,也可以調(diào)用getsystemdirectory函數(shù)來(lái)得到,得到的值為system32。
·windows目錄
·列在path環(huán)境變量中的所有目錄
vc中加載dll的lib文件的方法有以下三種:
、賚ib文件直接加入到工程文件列表中
在vc中打開(kāi)file view一頁(yè),選中工程名,單擊鼠標(biāo)右鍵,然后選中"add files to project"菜單,在彈出的文件對(duì)話框中選中要加入dll的lib文件即可。
②設(shè)置工程的 project settings來(lái)加載dll的lib文件
打開(kāi)工程的 project settings菜單,選中l(wèi)ink,然后在object/library modules下的文本框中輸入dll的lib文件。
③通過(guò)程序代碼的方式
加入預(yù)編譯指令#pragma comment (lib,"*.lib"),這種方法優(yōu)點(diǎn)是可以利用條件預(yù)編譯指令鏈接不同版本的lib文件。因?yàn),在debug方式下,產(chǎn)生的lib文件是debug版本,如regd.lib;在release方式下,產(chǎn)生的lib文件是release版本,如regr.lib。
當(dāng)應(yīng)用程序?qū)ll的lib文件加載后,還需要把dll對(duì)應(yīng)的頭文件(*.h)包含到其中,在這個(gè)頭文件中給出了dll中定義的函數(shù)原型,然后聲明。
2、顯式的運(yùn)行時(shí)鏈接
隱式鏈接雖然實(shí)現(xiàn)較簡(jiǎn)單,但除了必須的*.dll文件外還需要dll的*.h文件和*.lib文件,在那些只提供*.dll文件的場(chǎng)合就無(wú)法使用,而只能采用顯式鏈接的方式。這種方式通過(guò)調(diào)用api函數(shù)來(lái)完成對(duì)dll的加載與卸載,其能更加有效地使用內(nèi)存,在編寫(xiě)大型應(yīng)用程序時(shí)往往采用此方式。這種方法編程具體實(shí)現(xiàn)步驟如下:
、偈褂脀indows api函數(shù)load library或者mfc提供的afxloadlibrary將dll模塊映像到進(jìn)程的內(nèi)存空間,對(duì)dll模塊進(jìn)行動(dòng)態(tài)加載。
②使用getprocaddress函數(shù)得到要調(diào)用dll中的函數(shù)的指針。
③不用dll時(shí),用free library函數(shù)或者afxfreelibrary函數(shù)從進(jìn)程的地址空間顯式卸載dll。
vc中調(diào)用實(shí)例
數(shù)據(jù)加密是計(jì)算機(jī)安全領(lǐng)域的重要內(nèi)容,其基本思想是通過(guò)變換信息的表現(xiàn)形式來(lái)保護(hù)敏感信息,使非授權(quán)者不能了解被保護(hù)信息的內(nèi)容。常見(jiàn)的數(shù)據(jù)加密算法有:des,idea,rsa,ecc,aes,md5,sha等。
《共享軟件加密算法庫(kù)》是一款針對(duì)個(gè)人、企業(yè)開(kāi)發(fā)共享軟件的加密工具,支持windows平臺(tái)下各類(lèi)開(kāi)發(fā)工具:vc、vb、delphi、pb、vfp等,算法庫(kù)集成的算法有:blowfish、md5、secret16、aes、sha、crc32、rsa、des、字符串加/解密、
引言
模塊化思想貫穿于軟件工程各個(gè)發(fā)展階段,模塊復(fù)用是構(gòu)建大系統(tǒng)的一種重要思想。模塊復(fù)用方法有:函數(shù)、函數(shù)庫(kù)、動(dòng)態(tài)鏈接庫(kù)、com。其都是基于模塊化的基本思想。函數(shù)是最簡(jiǎn)單的模塊化思想,也是后面方法的基礎(chǔ),甚至是一個(gè)應(yīng)用程序的基礎(chǔ)。函數(shù)庫(kù)是函數(shù)的組合,一般將一些功能相似的函數(shù)放在一起作為函數(shù)庫(kù),這種函數(shù)庫(kù)通常叫做靜態(tài)庫(kù),其鏈接方式是靜態(tài)的。com即組件對(duì)象模型,是一種集成技術(shù),可以使程序在運(yùn)行時(shí)把各種不相關(guān)的軟件程序混合在一起,而不必考慮這些不相關(guān)的程序是用什么語(yǔ)言編寫(xiě)的,它也是一種標(biāo)準(zhǔn)或者稱為協(xié)議,負(fù)責(zé)將一個(gè)軟件模塊和另一個(gè)軟件連接起來(lái)。動(dòng)態(tài)鏈接庫(kù)dll(dynamic link library)是一個(gè)可以被其它應(yīng)用程序共享的程序模塊,其中封裝了一些可以被共享的例程和資源,其鏈接方式是動(dòng)態(tài)的。動(dòng)態(tài)鏈接庫(kù)文件的擴(kuò)展名一般是dll,也有可能是fon、sys和dry,它和可執(zhí)行文件(.exe)非常相似,區(qū)別在于dll中雖然包含了可執(zhí)行代碼卻不能單獨(dú)執(zhí)行,而應(yīng)由windows應(yīng)用程序直接或間接調(diào)用。windows操作系統(tǒng)包含大量動(dòng)態(tài)鏈接庫(kù),其中最主要的是kernel32.dll、user32.dll、gdi32.dll 。
dll的調(diào)用
調(diào)用dll,首先需要將dll文件映像到用戶進(jìn)程的地址空間中,然后才能進(jìn)行函數(shù)調(diào)用,這個(gè)函數(shù)和進(jìn)程內(nèi)部一般函數(shù)的調(diào)用方法相同。windows提供了兩種將dll映像到進(jìn)程地址空間的方法:
1、隱式的加載時(shí)鏈接
這種方法需要dll工程經(jīng)編譯產(chǎn)生的lib文件,此文件中包含了dll允許應(yīng)用程序調(diào)用的所有函數(shù)的列表,當(dāng)鏈接器發(fā)現(xiàn)應(yīng)用程序調(diào)用了lib文件列出的某個(gè)函數(shù),就會(huì)在應(yīng)用程序的可執(zhí)行文件的文件映像中加入一些信息,這些信息指出了包含這個(gè)函數(shù)的dll文件的名字。當(dāng)這個(gè)應(yīng)用程序運(yùn)行時(shí),也就是它的可執(zhí)行文件被操作系統(tǒng)產(chǎn)生映像文件時(shí),系統(tǒng)會(huì)查看這個(gè)映像文件中關(guān)于dll的信息,然后將這個(gè)dll文件映像到進(jìn)程的地址空間。
系統(tǒng)通過(guò)dll文件的名稱,試圖加載這個(gè)文件到進(jìn)程地址空間時(shí),它尋找dll 文件的路徑按照先后順序如下:
·程序運(yùn)行時(shí)的目錄,即可執(zhí)行文件所在的目錄;
·當(dāng)前程序工作目錄
·系統(tǒng)目錄:對(duì)于windows95/98來(lái)說(shuō),可以調(diào)用getsystemdirectory函數(shù)來(lái)得到,對(duì)于windowsnt/2000來(lái)說(shuō),指的是32位windows的系統(tǒng)目錄,也可以調(diào)用getsystemdirectory函數(shù)來(lái)得到,得到的值為system32。
·windows目錄
·列在path環(huán)境變量中的所有目錄
vc中加載dll的lib文件的方法有以下三種:
、賚ib文件直接加入到工程文件列表中
在vc中打開(kāi)file view一頁(yè),選中工程名,單擊鼠標(biāo)右鍵,然后選中"add files to project"菜單,在彈出的文件對(duì)話框中選中要加入dll的lib文件即可。
②設(shè)置工程的 project settings來(lái)加載dll的lib文件
打開(kāi)工程的 project settings菜單,選中l(wèi)ink,然后在object/library modules下的文本框中輸入dll的lib文件。
③通過(guò)程序代碼的方式
加入預(yù)編譯指令#pragma comment (lib,"*.lib"),這種方法優(yōu)點(diǎn)是可以利用條件預(yù)編譯指令鏈接不同版本的lib文件。因?yàn),在debug方式下,產(chǎn)生的lib文件是debug版本,如regd.lib;在release方式下,產(chǎn)生的lib文件是release版本,如regr.lib。
當(dāng)應(yīng)用程序?qū)ll的lib文件加載后,還需要把dll對(duì)應(yīng)的頭文件(*.h)包含到其中,在這個(gè)頭文件中給出了dll中定義的函數(shù)原型,然后聲明。
2、顯式的運(yùn)行時(shí)鏈接
隱式鏈接雖然實(shí)現(xiàn)較簡(jiǎn)單,但除了必須的*.dll文件外還需要dll的*.h文件和*.lib文件,在那些只提供*.dll文件的場(chǎng)合就無(wú)法使用,而只能采用顯式鏈接的方式。這種方式通過(guò)調(diào)用api函數(shù)來(lái)完成對(duì)dll的加載與卸載,其能更加有效地使用內(nèi)存,在編寫(xiě)大型應(yīng)用程序時(shí)往往采用此方式。這種方法編程具體實(shí)現(xiàn)步驟如下:
、偈褂脀indows api函數(shù)load library或者mfc提供的afxloadlibrary將dll模塊映像到進(jìn)程的內(nèi)存空間,對(duì)dll模塊進(jìn)行動(dòng)態(tài)加載。
②使用getprocaddress函數(shù)得到要調(diào)用dll中的函數(shù)的指針。
③不用dll時(shí),用free library函數(shù)或者afxfreelibrary函數(shù)從進(jìn)程的地址空間顯式卸載dll。
vc中調(diào)用實(shí)例
數(shù)據(jù)加密是計(jì)算機(jī)安全領(lǐng)域的重要內(nèi)容,其基本思想是通過(guò)變換信息的表現(xiàn)形式來(lái)保護(hù)敏感信息,使非授權(quán)者不能了解被保護(hù)信息的內(nèi)容。常見(jiàn)的數(shù)據(jù)加密算法有:des,idea,rsa,ecc,aes,md5,sha等。
《共享軟件加密算法庫(kù)》是一款針對(duì)個(gè)人、企業(yè)開(kāi)發(fā)共享軟件的加密工具,支持windows平臺(tái)下各類(lèi)開(kāi)發(fā)工具:vc、vb、delphi、pb、vfp等,算法庫(kù)集成的算法有:blowfish、md5、secret16、aes、sha、crc32、rsa、des、字符串加/解密、
摘 要:介紹了動(dòng)態(tài)鏈接庫(kù)這種模塊復(fù)用方法及在vc中對(duì)它的調(diào)用,并給出了一個(gè)通過(guò)復(fù)用來(lái)實(shí)現(xiàn)數(shù)據(jù)加密的具體實(shí)例。
引言
模塊化思想貫穿于軟件工程各個(gè)發(fā)展階段,模塊復(fù)用是構(gòu)建大系統(tǒng)的一種重要思想。模塊復(fù)用方法有:函數(shù)、函數(shù)庫(kù)、動(dòng)態(tài)鏈接庫(kù)、com。其都是基于模塊化的基本思想。函數(shù)是最簡(jiǎn)單的模塊化思想,也是后面方法的基礎(chǔ),甚至是一個(gè)應(yīng)用程序的基礎(chǔ)。函數(shù)庫(kù)是函數(shù)的組合,一般將一些功能相似的函數(shù)放在一起作為函數(shù)庫(kù),這種函數(shù)庫(kù)通常叫做靜態(tài)庫(kù),其鏈接方式是靜態(tài)的。com即組件對(duì)象模型,是一種集成技術(shù),可以使程序在運(yùn)行時(shí)把各種不相關(guān)的軟件程序混合在一起,而不必考慮這些不相關(guān)的程序是用什么語(yǔ)言編寫(xiě)的,它也是一種標(biāo)準(zhǔn)或者稱為協(xié)議,負(fù)責(zé)將一個(gè)軟件模塊和另一個(gè)軟件連接起來(lái)。動(dòng)態(tài)鏈接庫(kù)dll(dynamic link library)是一個(gè)可以被其它應(yīng)用程序共享的程序模塊,其中封裝了一些可以被共享的例程和資源,其鏈接方式是動(dòng)態(tài)的。動(dòng)態(tài)鏈接庫(kù)文件的擴(kuò)展名一般是dll,也有可能是fon、sys和dry,它和可執(zhí)行文件(.exe)非常相似,區(qū)別在于dll中雖然包含了可執(zhí)行代碼卻不能單獨(dú)執(zhí)行,而應(yīng)由windows應(yīng)用程序直接或間接調(diào)用。windows操作系統(tǒng)包含大量動(dòng)態(tài)鏈接庫(kù),其中最主要的是kernel32.dll、user32.dll、gdi32.dll 。
dll的調(diào)用
調(diào)用dll,首先需要將dll文件映像到用戶進(jìn)程的地址空間中,然后才能進(jìn)行函數(shù)調(diào)用,這個(gè)函數(shù)和進(jìn)程內(nèi)部一般函數(shù)的調(diào)用方法相同。windows提供了兩種將dll映像到進(jìn)程地址空間的方法:
1、隱式的加載時(shí)鏈接
這種方法需要dll工程經(jīng)編譯產(chǎn)生的lib文件,此文件中包含了dll允許應(yīng)用程序調(diào)用的所有函數(shù)的列表,當(dāng)鏈接器發(fā)現(xiàn)應(yīng)用程序調(diào)用了lib文件列出的某個(gè)函數(shù),就會(huì)在應(yīng)用程序的可執(zhí)行文件的文件映像中加入一些信息,這些信息指出了包含這個(gè)函數(shù)的dll文件的名字。當(dāng)這個(gè)應(yīng)用程序運(yùn)行時(shí),也就是它的可執(zhí)行文件被操作系統(tǒng)產(chǎn)生映像文件時(shí),系統(tǒng)會(huì)查看這個(gè)映像文件中關(guān)于dll的信息,然后將這個(gè)dll文件映像到進(jìn)程的地址空間。
系統(tǒng)通過(guò)dll文件的名稱,試圖加載這個(gè)文件到進(jìn)程地址空間時(shí),它尋找dll 文件的路徑按照先后順序如下:
·程序運(yùn)行時(shí)的目錄,即可執(zhí)行文件所在的目錄;
·當(dāng)前程序工作目錄
·系統(tǒng)目錄:對(duì)于windows95/98來(lái)說(shuō),可以調(diào)用getsystemdirectory函數(shù)來(lái)得到,對(duì)于windowsnt/2000來(lái)說(shuō),指的是32位windows的系統(tǒng)目錄,也可以調(diào)用getsystemdirectory函數(shù)來(lái)得到,得到的值為system32。
·windows目錄
·列在path環(huán)境變量中的所有目錄
vc中加載dll的lib文件的方法有以下三種:
、賚ib文件直接加入到工程文件列表中
在vc中打開(kāi)file view一頁(yè),選中工程名,單擊鼠標(biāo)右鍵,然后選中"add files to project"菜單,在彈出的文件對(duì)話框中選中要加入dll的lib文件即可。
②設(shè)置工程的 project settings來(lái)加載dll的lib文件
打開(kāi)工程的 project settings菜單,選中l(wèi)ink,然后在object/library modules下的文本框中輸入dll的lib文件。
③通過(guò)程序代碼的方式
加入預(yù)編譯指令#pragma comment (lib,"*.lib"),這種方法優(yōu)點(diǎn)是可以利用條件預(yù)編譯指令鏈接不同版本的lib文件。因?yàn)椋赿ebug方式下,產(chǎn)生的lib文件是debug版本,如regd.lib;在release方式下,產(chǎn)生的lib文件是release版本,如regr.lib。
當(dāng)應(yīng)用程序?qū)ll的lib文件加載后,還需要把dll對(duì)應(yīng)的頭文件(*.h)包含到其中,在這個(gè)頭文件中給出了dll中定義的函數(shù)原型,然后聲明。
2、顯式的運(yùn)行時(shí)鏈接
隱式鏈接雖然實(shí)現(xiàn)較簡(jiǎn)單,但除了必須的*.dll文件外還需要dll的*.h文件和*.lib文件,在那些只提供*.dll文件的場(chǎng)合就無(wú)法使用,而只能采用顯式鏈接的方式。這種方式通過(guò)調(diào)用api函數(shù)來(lái)完成對(duì)dll的加載與卸載,其能更加有效地使用內(nèi)存,在編寫(xiě)大型應(yīng)用程序時(shí)往往采用此方式。這種方法編程具體實(shí)現(xiàn)步驟如下:
①使用windows api函數(shù)load library或者mfc提供的afxloadlibrary將dll模塊映像到進(jìn)程的內(nèi)存空間,對(duì)dll模塊進(jìn)行動(dòng)態(tài)加載。
、谑褂胓etprocaddress函數(shù)得到要調(diào)用dll中的函數(shù)的指針。
③不用dll時(shí),用free library函數(shù)或者afxfreelibrary函數(shù)從進(jìn)程的地址空間顯式卸載dll。
vc中調(diào)用實(shí)例
數(shù)據(jù)加密是計(jì)算機(jī)安全領(lǐng)域的重要內(nèi)容,其基本思想是通過(guò)變換信息的表現(xiàn)形式來(lái)保護(hù)敏感信息,使非授權(quán)者不能了解被保護(hù)信息的內(nèi)容。常見(jiàn)的數(shù)據(jù)加密算法有:des,idea,rsa,ecc,aes,md5,sha等。
《共享軟件加密算法庫(kù)》是一款針對(duì)個(gè)人、企業(yè)開(kāi)發(fā)共享軟件的加密工具,支持windows平臺(tái)下各類(lèi)開(kāi)發(fā)工具:vc、vb、delphi、pb、vfp等,算法庫(kù)集成的算法有:blowfish、md5、secret16、aes、sha、crc32、rsa、des、字符串加/解密、
引言
模塊化思想貫穿于軟件工程各個(gè)發(fā)展階段,模塊復(fù)用是構(gòu)建大系統(tǒng)的一種重要思想。模塊復(fù)用方法有:函數(shù)、函數(shù)庫(kù)、動(dòng)態(tài)鏈接庫(kù)、com。其都是基于模塊化的基本思想。函數(shù)是最簡(jiǎn)單的模塊化思想,也是后面方法的基礎(chǔ),甚至是一個(gè)應(yīng)用程序的基礎(chǔ)。函數(shù)庫(kù)是函數(shù)的組合,一般將一些功能相似的函數(shù)放在一起作為函數(shù)庫(kù),這種函數(shù)庫(kù)通常叫做靜態(tài)庫(kù),其鏈接方式是靜態(tài)的。com即組件對(duì)象模型,是一種集成技術(shù),可以使程序在運(yùn)行時(shí)把各種不相關(guān)的軟件程序混合在一起,而不必考慮這些不相關(guān)的程序是用什么語(yǔ)言編寫(xiě)的,它也是一種標(biāo)準(zhǔn)或者稱為協(xié)議,負(fù)責(zé)將一個(gè)軟件模塊和另一個(gè)軟件連接起來(lái)。動(dòng)態(tài)鏈接庫(kù)dll(dynamic link library)是一個(gè)可以被其它應(yīng)用程序共享的程序模塊,其中封裝了一些可以被共享的例程和資源,其鏈接方式是動(dòng)態(tài)的。動(dòng)態(tài)鏈接庫(kù)文件的擴(kuò)展名一般是dll,也有可能是fon、sys和dry,它和可執(zhí)行文件(.exe)非常相似,區(qū)別在于dll中雖然包含了可執(zhí)行代碼卻不能單獨(dú)執(zhí)行,而應(yīng)由windows應(yīng)用程序直接或間接調(diào)用。windows操作系統(tǒng)包含大量動(dòng)態(tài)鏈接庫(kù),其中最主要的是kernel32.dll、user32.dll、gdi32.dll 。
dll的調(diào)用
調(diào)用dll,首先需要將dll文件映像到用戶進(jìn)程的地址空間中,然后才能進(jìn)行函數(shù)調(diào)用,這個(gè)函數(shù)和進(jìn)程內(nèi)部一般函數(shù)的調(diào)用方法相同。windows提供了兩種將dll映像到進(jìn)程地址空間的方法:
1、隱式的加載時(shí)鏈接
這種方法需要dll工程經(jīng)編譯產(chǎn)生的lib文件,此文件中包含了dll允許應(yīng)用程序調(diào)用的所有函數(shù)的列表,當(dāng)鏈接器發(fā)現(xiàn)應(yīng)用程序調(diào)用了lib文件列出的某個(gè)函數(shù),就會(huì)在應(yīng)用程序的可執(zhí)行文件的文件映像中加入一些信息,這些信息指出了包含這個(gè)函數(shù)的dll文件的名字。當(dāng)這個(gè)應(yīng)用程序運(yùn)行時(shí),也就是它的可執(zhí)行文件被操作系統(tǒng)產(chǎn)生映像文件時(shí),系統(tǒng)會(huì)查看這個(gè)映像文件中關(guān)于dll的信息,然后將這個(gè)dll文件映像到進(jìn)程的地址空間。
系統(tǒng)通過(guò)dll文件的名稱,試圖加載這個(gè)文件到進(jìn)程地址空間時(shí),它尋找dll 文件的路徑按照先后順序如下:
·程序運(yùn)行時(shí)的目錄,即可執(zhí)行文件所在的目錄;
·當(dāng)前程序工作目錄
·系統(tǒng)目錄:對(duì)于windows95/98來(lái)說(shuō),可以調(diào)用getsystemdirectory函數(shù)來(lái)得到,對(duì)于windowsnt/2000來(lái)說(shuō),指的是32位windows的系統(tǒng)目錄,也可以調(diào)用getsystemdirectory函數(shù)來(lái)得到,得到的值為system32。
·windows目錄
·列在path環(huán)境變量中的所有目錄
vc中加載dll的lib文件的方法有以下三種:
、賚ib文件直接加入到工程文件列表中
在vc中打開(kāi)file view一頁(yè),選中工程名,單擊鼠標(biāo)右鍵,然后選中"add files to project"菜單,在彈出的文件對(duì)話框中選中要加入dll的lib文件即可。
②設(shè)置工程的 project settings來(lái)加載dll的lib文件
打開(kāi)工程的 project settings菜單,選中l(wèi)ink,然后在object/library modules下的文本框中輸入dll的lib文件。
③通過(guò)程序代碼的方式
加入預(yù)編譯指令#pragma comment (lib,"*.lib"),這種方法優(yōu)點(diǎn)是可以利用條件預(yù)編譯指令鏈接不同版本的lib文件。因?yàn)椋赿ebug方式下,產(chǎn)生的lib文件是debug版本,如regd.lib;在release方式下,產(chǎn)生的lib文件是release版本,如regr.lib。
當(dāng)應(yīng)用程序?qū)ll的lib文件加載后,還需要把dll對(duì)應(yīng)的頭文件(*.h)包含到其中,在這個(gè)頭文件中給出了dll中定義的函數(shù)原型,然后聲明。
2、顯式的運(yùn)行時(shí)鏈接
隱式鏈接雖然實(shí)現(xiàn)較簡(jiǎn)單,但除了必須的*.dll文件外還需要dll的*.h文件和*.lib文件,在那些只提供*.dll文件的場(chǎng)合就無(wú)法使用,而只能采用顯式鏈接的方式。這種方式通過(guò)調(diào)用api函數(shù)來(lái)完成對(duì)dll的加載與卸載,其能更加有效地使用內(nèi)存,在編寫(xiě)大型應(yīng)用程序時(shí)往往采用此方式。這種方法編程具體實(shí)現(xiàn)步驟如下:
①使用windows api函數(shù)load library或者mfc提供的afxloadlibrary將dll模塊映像到進(jìn)程的內(nèi)存空間,對(duì)dll模塊進(jìn)行動(dòng)態(tài)加載。
、谑褂胓etprocaddress函數(shù)得到要調(diào)用dll中的函數(shù)的指針。
③不用dll時(shí),用free library函數(shù)或者afxfreelibrary函數(shù)從進(jìn)程的地址空間顯式卸載dll。
vc中調(diào)用實(shí)例
數(shù)據(jù)加密是計(jì)算機(jī)安全領(lǐng)域的重要內(nèi)容,其基本思想是通過(guò)變換信息的表現(xiàn)形式來(lái)保護(hù)敏感信息,使非授權(quán)者不能了解被保護(hù)信息的內(nèi)容。常見(jiàn)的數(shù)據(jù)加密算法有:des,idea,rsa,ecc,aes,md5,sha等。
《共享軟件加密算法庫(kù)》是一款針對(duì)個(gè)人、企業(yè)開(kāi)發(fā)共享軟件的加密工具,支持windows平臺(tái)下各類(lèi)開(kāi)發(fā)工具:vc、vb、delphi、pb、vfp等,算法庫(kù)集成的算法有:blowfish、md5、secret16、aes、sha、crc32、rsa、des、字符串加/解密、
熱門(mén)點(diǎn)擊
- CPLD開(kāi)發(fā)板和FPGA開(kāi)發(fā)板的區(qū)別
- 基于FPGA和AD1836的I2S接口設(shè)計(jì)
- vc中如何使用設(shè)備描述表
- Visual C++中調(diào)用DLL實(shí)現(xiàn)數(shù)據(jù)加密
- Visual C++6.0 API函數(shù)操作技
- JavaCard CPU的設(shè)計(jì)與FPGA實(shí)現(xiàn)
- VC++中進(jìn)程與多進(jìn)程管理的方法
- 如何用C語(yǔ)言開(kāi)發(fā)DSP嵌入式系統(tǒng)
- C和C++ 字符串字面量的比較
- Xilinx針對(duì)Virtex-5 FXT F
推薦技術(shù)資料
- 聲道前級(jí)設(shè)計(jì)特點(diǎn)
- 與通常的Hi-Fi前級(jí)不同,EP9307-CRZ這臺(tái)分... [詳細(xì)]
- 電源管理 IC (PMIC)&
- I2C 接口和 PmBUS 以及 OTP/M
- MOSFET 和柵極驅(qū)動(dòng)器單
- 數(shù)字恒定導(dǎo)通時(shí)間控制模式(CO
- Power Management Buck/
- 反激變換器傳導(dǎo)和輻射電磁干擾分析和抑制技術(shù)
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動(dòng)IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究