資源描述:
《c語(yǔ)言如何生成DLL文件.pdf》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、開發(fā)環(huán)境是DEVC++,采用C語(yǔ)言編寫創(chuàng)建一個(gè)DLL項(xiàng)目,項(xiàng)目名稱hello,DLL編寫采用的是DEVC++中的示例代碼頭文件dll.h#ifndef_DLL_H_#define_DLL_H_#ifBUILDING_DLL#defineDLLIMPORT__declspec(dllexport)#else/*NotBUILDING_DLL*/#defineDLLIMPORT__declspec(dllimport)#endif/*NotBUILDING_DLL*/DLLIMPORTvoidHelloWorld(void);#endif/*_D
2、LL_H_*/C文件dllmain.c#include#includeDLLIMPORTvoidHelloWorld(){MessageBox(0,"HelloWorldfromDLL!","Hi",MB_ICONINFORMATION);}BOOLAPIENTRYDllMain(HINSTANCEhInst/*Libraryinstancehandle.*/,DWORDreason/*Reasonthisfunctionisbeingcalled.*/,LPVOIDreserved/*Notused
3、.*/){switch(reason){caseDLL_PROCESS_ATTACH:break;caseDLL_PROCESS_DETACH:break;caseDLL_THREAD_ATTACH:break;caseDLL_THREAD_DETACH:break;}/*ReturnsTRUEonsuccess,FALSEonfailure*/returnTRUE;}還有要注意的在.def文件中指定輸出的函數(shù),編譯生成了hello.dll文件DLL調(diào)用部分dllcall.c#include#include4、h>#includeHINSTANCEhDLL;//定義DLL包柄typedefvoid(*func)();//定義函數(shù)指針原型funchello;//定義函數(shù)指針intmain(){if(hDLL==NULL)hDLL=LoadLibrary("hello.dll");//加載DLLhello=(func)GetProcAddress(hDLL,"HelloWorld");//獲取函數(shù)指針hello();FreeLibrary(hDLL);//釋放DLLreturn0;}編譯執(zhí)行/*c語(yǔ)言調(diào)用dll里的函數(shù)-例子2之文件
5、下載都5點(diǎn)了,還是睡不著,躺在床上想著該做點(diǎn)撒,于是乎,開始查找了下資料,大致弄清楚了c里怎么調(diào)用dll里的函數(shù),就寫了個(gè)文件下載的例子,很簡(jiǎn)單,調(diào)用系統(tǒng)本身的UrlMon.dll里的URLDownloadToFileA函數(shù),之前的例子一是過程的調(diào)用,現(xiàn)在這個(gè)是函數(shù)的調(diào)用,都很簡(jiǎn)單。*/#include#includetypedefint(*MYFUNC)(PVOID,char*,char*,int,char*);/*函數(shù)原型*/intmain(){HINSTANCELibHandle;MYFUNC
6、FUNCADD;chardllbuf[]="UrlMon.dll";charsysbuf[]="URLDownloadToFileA";/*函數(shù)名*/char*downfile="http://www.baidu.com/img/logo-yy.gif";/*過程要帶入的參數(shù)*/char*savefile="f:\c\baidu.gif";LibHandle=LoadLibrary(dllbuf);/*載入dll*/FUNCADD=(MYFUNC)GetProcAddress(LibHandle,sysbuf);/*獲取函數(shù)sysbuf的
7、地址*/(FUNCADD)(NULL,downfile,savefile,0,NULL);/*FUNCADD就相當(dāng)于函數(shù)URLDownloadToFileA后面是參數(shù)*/}