vc 关于动态库的哪些知识
来源:互联网 发布:centos lamp 一键安装 编辑:程序博客网 时间:2024/05/21 00:00
项目开发都是分模块的,所以常常需要些个动态库方便别人调用。这两天因为项目集成,因为是组长负责集成我只需要跟进就可以,模块有问题需要及时调整的。所以上班的时候有零碎的时间。就看看公司的一些代码,然后有感而发,就把动多态库的知识看了一下。下面是一些心得(都是从一个文章摘抄的一些东西,pdf我会上传的):
1.,静态调用方式的顺利进行需要完成两个动作
(1)告诉编译器与 DLL 相对应的.lib 文件所在的路径及文件名,#pragmacomment(lib,"dllTest.lib")就是起这个作用。
程序员在建立一个 DLL 文件时,连接器会自动为其生成一个对应的.lib 文件,
该文件包含了 DLL 导出函数的符号名及序号(并不含有实际的代码)。在应用程序里,.lib 文件将作为 DLL 的替代文件参与编译。
2)声明导入函数,extern "C" __declspec(dllimport) add(int x,inty)语句中的__declspec(dllimport)发挥这个作用。
2.DllMain函数
2.1.Windows 在加载 DLL 的时候,需要一个入口函数;DLL 如没
有提供 DllMain 函数,应用工程也能成功引用 DLL,这是因为 Windows 在找不到
DllMain 的时候,系统会从其它运行库中引入一个不做任何操作的缺省 DllMain
函数版本
2.2 Windows 必须查找并执行 DLL 里的 DllMain 函数作为加载
DLL 的依据,它使得 DLL 得以保留在内存里。这个函数并不属于导出函数,而是
DLL 的内部函数。这意味着不能直接在应用工程中引用 DllMain 函数,DllMain
是自动被调用的。
3.MFC DLL使用:
3.1 Regular DLL 分为两类
(1)静态链接到 MFC 的规则 DLL
静态链接到 MFC 的规则 DLL 与 MFC 库(包括 MFC 扩展 DLL)静态链接,将
MFC 库的代码直接生成在.dll 文件中。在调用这种 DLL 的接口时,MFC 使用 DLL
的资源。因此,在静态链接到 MFC 的规则 DLL 中不需要进行模块状态的切换。
使用这种方法生成的规则 DLL 其程序较大,也可能包含重复的代码。
(2)动态链接到 MFC 的规则 DLL
动态链接到 MFC 的规则 DLL 可以和使用它的可执行文件同时动态链接到
MFC DLL 和任何 MFC 扩展 DLL。在使用了 MFC 共享库的时候,默认情况下,MFC
使用主应用程序的资源句柄来加载资源模板。这样,当 DLL 和应用程序中存在相
同 ID 的资源时(即所谓的资源重复问题),系统可能不能获得正确的资源。因
此,对于共享 MFC DLL 的规则 DLL,我们必须进行模块切换以使得 MFC 能够找到
正确的资源模板。
3.2 共享 MFC DLL 的规则 DLL 的模块切换
(1)应用程序进程本身及其调用的每个 DLL 模块都具有一个全局唯一的
HINSTANCE 句柄,它们代表了 DLL 或 EXE 模块在进程虚拟空间中的起始地址。进
程本身的模块句柄一般为 0x400000,而 DLL 模块的缺省句柄为 0x10000000
(2)共享 MFC DLL(或 MFC 扩展 DLL)的规则 DLL 涉及到 HINSTANCE 句柄问题,
HINSTANCE 句柄对于加载资源特别重要。EXE 和 DLL 都有其自己的资源,而且这
些资源的 ID 可能重复,应用程序需要通过资源模块的切换来找到正确的资源
(3)资源模块句柄的切换,其实现方法有三:
方法一在 DLL 接口函数中使用:
AFX_MANAGE_STATE(AfxGetStaticModuleState());
方法二在 DLL 接口函数中使用:
AfxGetResourceHandle 用于获取当前资源模块句柄,而
AfxSetResourceHandle 则用于设置程序目前要使用的资源模块句柄。
方法三 由应用程序自身切换
资源模块的切换除了可以由 DLL 接口函数完成以外,由应用程序自身也能
完成
文章所有的东西都是来自《VC++动态链接库(DLL)》,我希望看到这个帖子的人如果有需要的话可以看看这个数,比较详细,文章也不长。
- vc 关于动态库的哪些知识
- 关于VC++动态链接库的相关知识
- 关于动态链接库哪些问题
- 关于vc下dll的相关知识
- 关于动态代理的一点知识
- vc知识积累(3.动态链接库使用)
- VC++知识的收集
- 入门知识之——VC++ 静态链接库和动态链接库的配置 (lib、dll)
- 关于网页动态数据获取的知识学习(1)
- 关于网页动态数据获取的知识学习(2)
- VC使用动态库关于/MD与/MT的一个坑
- 关于VC中动态申请空间大小查看的方法
- 关于动态IP主机的通信 用vc怎么实现
- 关于VC++下动态添加菜单的心得
- 有哪些必备的知识技能?
- 动态的知识
- 通达OA 关于开发都需要掌握哪些知识
- vc的一些小知识
- Ibatis实现动态分页分析之一
- 简单的登录界面
- SVN服务器搭建和使用(二)
- java中的位运算
- cadence学习记录
- vc 关于动态库的哪些知识
- 一些HTML的备忘复习笔记
- SVN服务器搭建和使用(三)
- TortoiseSVN客户端重新设置用户名和密码
- 实数和浮点数之间的变换
- Windows 常用消息大全
- Unity自带范例的默认安装路径(AngryBots和Bootcamp Demo)
- Silverlight数据绑定--元素属性绑定
- 打Patch实践