- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《VCD编程笔记
VC DLL编程笔记VC++?DLL编程笔记(一)?Published?by?wonglaye?三月?24th,?2006?in?VC??动态链接库DLL同静态Lib链接的区别在于:程序在编译成可执行文件时会把静态链接库中的程序拷进可执行文件中,所以Lib文件是不用同可执行?文件一同发布的。而链接到动态库DLL中时要通过一个Lib文件,Lib文件保存了函数或类在DLL中的入口地址,可执行文件中相应存放的也是函数地址,?所以DLL和Lib要同可执行文件一起发布。?1.?VC中支持的DLL种类:Non?MFC?DLL,Regular?DLL,Exetension?DLL?Non?MFC?DLL?非MFC动态链接库:不使用MFC类库结构,直接用C写,输出函数用标准C接口,能被非MFC程序调用?Regular?DLL?正则动态链接库:使用MFC编写,源文件中有继承自CWinApp的类,只能被MFC调用;正则Dll又分成静态连接到MFC的和动态链接到MFC的,在创建时会看到。?Extension?DLL?扩展动态链接库:实现从MFC继承下来的新类,输出MFC新子类,只能被MFC调用?实践:在新建菜单中选择新建工程Win32?Dynamic?Link?Library,选择simple?project,加入自己的函数MyFunction:?#include?“stdafx.h”?//#include?“DLL.h”?//也可省略Extern?“C”,它的作用是使其他语言可以访问到?extern?“C”??_declspec(dllexport)?int?MyFunction();//可以将这一行放在DLL.h里,也可用.def文件创建?//入口地址?BOOL?APIENTRY?DllMain(?HANDLE?hModule,?//指向自身的句柄????????????????????????DWORD??ul_reason_for_call,?//Dll被调用的原因????????????????????????LPVOID?lpReserved//保留参数???????)?{??switch?(ul_reason_for_call)//调用原因??{???case?DLL_PROCESS_ATTACH://进程被调用???case?DLL_THREAD_ATTACH://线程被调用???case?DLL_THREAD_DETACH://进程被停止???case?DLL_PROCESS_DETACH://线程被停止????break;?????}?????return?TRUE;?}?int??MyFunction()//自定函数?{???return?886;?}?编译后即可生成DLL文件和相应的Lib文件??VC++?DLL编程笔记(二)?Published?by?wonglaye?三月?25th,?2006?in?VC??调用DLL的方法:显式调用?隐式调用?显调:用LoadLibrary或AfxLoadLibrary显式调入Dll,再用GetProcAddress引入函数,最后用FreeLibrary或AfxFreeLibrary(参数是AfxLoadLibrary返回的句柄)释放Dll?隐调:需要加入动态链接库Lib文件,不需要调用LoadLibrayr或AfxLoadLibrary?实践隐调:新建一个工程DllDemo,将之前的Dll.dll和Dll.lib拷贝到工程目录下?//?DllDemo.cpp?:?#include?“stdafx.h”?#include?“stdio.h”?//#include?“DllDemo.h”?#pragma?comment(lib,”Dll.lib”)?//引入Dll.lib,也可在设置中link?extern?“C”?_declspec(dllimport)?int?MyFunction();//导入MyFunction,也可放在头文件中,如果dll中有加extern,导入时也要加extern?int?main(int?argc,?char*?argv[])?{??int?result=MyFunction();??printf(”The?number?is?%d?\r\n”,result);??return?0;?}?VC++DLL编程笔记(三)?Published?by?wonglaye?四月?5th,?2006?in?VC??Dll的显式调用?将调试好的DLL文件和LIb文件拷贝到工程目录?主调函数的构造过程大致为:?1.typedef一个以dll内函数为类型、参数相同的函数指针,并用这个函数指针声明一个实例?2.LoadLibrary(”dll文件名”)返回一个HINSTANCE?
文档评论(0)