动态链接库笔记.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动态链接库笔记

隐式链接: 先编写一个完加法运算函数和一个减法运算函数,会生成.dll文件,为动态链接库文件。 测试是否可以访问,必须是可以导出的函数,判断是否到处,打开命令提示符,输入路径; 可以在vc的bin目录下查找dumpbin。找不到是环境被破坏了。 信息下没有函数,说明没有导数,如果要导出,需要在导出的函数前面加declspec(dllexport)int add(int a,int b); 已经导出函数。 设置按钮窗口, 选择mfc 双击:分别调用add函数和sub函数,申明函数,extern来申明,主要说明是外部函数。 编译一下,在链接时出现错误。 将dl1.lib文件拷贝到dll.text文件目录下。,就包含了导出函数的符号名。 工程选择link。 再次编译就没有问题了。 可以查看文件的输入信息,进入到测试的目录下 再次运行出现错误,找不到指定路径 将dll文件放在当前目录下。就运行没问题了。 Vc安装目录下找到depends,打开,可以找一下dll..exe文件,查看可执行模块。 将dll放在测试的debug目录下在重新打开。再次打开就没有问题了 当我们选择一个动态链接库时,就列出了导出的函数。在其他程序中不一定全部访问。 Declspec申明函数,效率更高与extern。 增加一个头文件,将代码复制到头文件中。只是给客服端使用。 注释测试程序中的代码。编译成功,结果一样。 用宏代替。 在dll.cpp中,用宏代替declspec,包含头文件 首先要定义一个红dll1_API _declspec(dllexport); 将编译生成的dll和lib文件放在测试程序下。 导出一个c++的类: 在h文件写上。 Class point { Public:void suport(int x,int y); }; Private 无法访问的。 在cpp文件加上 GetForGroundWindow可以得到当前使用窗口的句柄 将编译生成的dll和lib拷贝到测试工程下。 加一个按钮,输出button 将测试客服端的dll文件删除,执行可执行程序时会加载。然后再执行就可以了 导出函数,在dumbin export下查看。 在头文件中申明output函数,为了测试我们导出的只有output,可以进行测试。 在头文件加上一个函数,在源文件中测试,dumbin下查看就可以发现没有导出所添加的函数。 C++的程序不能给c语言的客户端程序使用,否则会出错。 在定义宏是加上extern “C”,编译可以发现导出情况,与源程序下是一致的。 Extern 不能导出成员函数,只能导出全局函数。调用约定改变,即使用了extern”C”也会改变。调用约定就是DLL_API。 这里使用的是标准调用约定_stdcall; 查看导出情况,函数名发生变化; 关于工程,新建动态链接库工程,dll2。 在源文件中写两个函数,一个完成加法,一个完成减法; 写一个模块定义文件,在工程目录下,新建文本文档,将文本文档的名字改为dll2.def 将文件加到工程中,选择工程 在模块定义文件中,写一个 LIBRARY DLL2 EXPORTS Add Substract 可以在msdn中查找EXPORTS的用法。 编译一下就生成动态链接库,在dumpbin下查看导出信息。 在客户端测试程序加动态加载动态链接库。 在工程设置中删除lib文件,可使用loadlibrary,可以加载一个可执行程序。 利用一个函数指针,相当于定义了一个新的函数整体。 GetProcessAddress()返回的是一个函数地址,“add”是函数名称。 可以用消息框判断是否为空,获取地址是否失败。 结果失败,需要将动态链接库拷贝到测试程序的目录下。动态加载可以在需要的时候加载。如果程序需要访问10几个动态链接库,都需要加载到内存,映射到动态链接库。会造成资源浪费。 可以使用动态加载。 如果调用约定改变成标准调用约定。查看没有发生变化,定义的函数指针要标准调用约定,也需要申明,当采用动态加载动态链接库时,没有dll.dll的信息。 新建一个新的动态链接库 只写一个add方法,加上标识,表明是导出函数编译。 将动态链接库拷贝到测试程序目录下,注释掉stdcall,获取函数地址失败 查看Dll3动态链接库函数的名字,名字是?Add。。。 查看dumpbin下的名字,复制在GetProcAddress()名字中,也可以用一个宏,根据序号访问,可以用一个宏MACINTERSOURCE(1),将序号转化为字符串,调用导出的函数。 DllMain函数:(主要百度) 动态链接库的入口函数,写动态链接库时可写可不写,当动态链接库初次加载时会加载句柄,编写的动态链接库模块的句柄,可以提供DllMain函数,只需要拷贝放

文档评论(0)

shenlan118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档