DLL生成与使用
来源:互联网 发布:云数据一体机能贷款吗 编辑:程序博客网 时间:2024/05/18 03:52
1. 关于DLL和LIB
文章《LIB和DLL的区别与使用》有介绍,这里做一个总结。
(1)LIB有2种,一种是动态的,一种是静态的
(2)对于静态的LIB,里面包含了函数代码本身,程序编译时直接读取该LIB得到最终的EXE,这样EXE会比较大,更新LIB顺带需要更新EXE
(3)对于动态的LIB,里面仅包含函数的入口和位置,函数的具体实现在DLL中。这样编译得到的EXE相对比较小,因为EXE是在执行的时候才加载DLL里的内容,因此发布的EXE需要附带有相应的DLL和LIB。
2. 编译DLL
以VS2010为例,其提供了两种DLL工程的建立方式(虽然在控制台项目下也可配置为MFC):控制台DLL,基于MFC的DLL
图1-1. 建立DLL工程(两种方式)
图1-2是两种方式的二级菜单,选择静态还是动态LIB,一般是选动态了,原因见上一节
图1-2. 第1种方式的二级菜单可以添加MFC头文件
两种方式实质都差不多,非MFC方式会有个dllmain.cpp文件,其中的dllmain()函数是DLL的进入、退出函数
与普通工程编写一样,但对于接口函数,需要做特殊声明(实际上DLL还可以用来导出类、变量:VC++ MFC DLL动态链接库编写详解)
图1-3. MFC_DLL工程自动生成的提示
给个例子吧
extern "C" _declspec(dllexport) int EncryptF(LPCWSTR lpszInFile, int nKeyIndex,int nStartLine, int nEndLine, LPCWSTR lpszOutFile){ ...}
3. 使用DLL
DLL工程编译后会生成一个DLL和一个LIB,调用该DLL的工程需要知道它们的位置
图1-4. 可以在属性中设置LIB目录,也可在代码中指定
需要首先对DLL用到的函数接口做个声明:
typedef int (WINAPIV *DLL_EncryptF)(LPCWSTR lpszInFile, int nKeyIndex,int nStartLine, int nEndLine, LPCWSTR lpszOutFile);其中DLL_EncryptF是自己定义的,一个函数接口定义一种
然后读入DLL,调用该函数:
HMODULE m_hModule = LoadLibrary(L"myDLL.dll");DLL_EncryptF m_Encrypt;if(NULL != m_hModule)m_Encrypt = (DLL_EncryptF)GetProcAddress(m_hModule, "EncryptF");int encryptFlag;if(NULL != m_Encrypt)encryptFlag = m_Encrypt(wcPathLoad, 20, -1, -1, wcPathSave);FreeLibrary(m_hModule);
0 0
- DLL生成与使用
- MFC DLL 的生成与使用
- C++语言的dll生成与使用
- C#生成dll,使用dll
- c++中.dll与.lib文件的生成与使用
- 生成并使用dll
- DLL生成和使用
- dll文件生成使用
- VS2005使用DEF文件来生成DLL与Lib
- VS2005使用DEF文件来生成DLL与Lib
- VS2005使用DEF文件来生成DLL与Lib
- VS20XX使用DEF文件来生成DLL与Lib
- VS2005使用DEF文件来生成DLL与Lib
- VS2005使用DEF文件来生成DLL与Lib(转载)
- VS2010使用DEF文件来生成DLL与Lib
- 使用DEF文件来生成DLL与Lib
- VS2005使用DEF文件来生成DLL与Lib
- DLL与LIB库文件的生成和使用
- 仿照微信首页下拉拍照的demo
- java 读写文件
- Android 基础UI Demo小合集
- 前言
- iOS开发-使用Storyboard进行界面跳转及传值
- DLL生成与使用
- maven中配置本地仓库和远程仓库(私服)
- svn版本库迁移
- SpringMVC注解模式下,整体处理传入和传出的乱码问题
- 设置用户圆形头像
- select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
- 配置定时启动python 脚本
- [Linux] 关机和重启命令详解
- 苹果开发者账号注册