生成、使用DLL看起来简单,但做起来才发现还是有一些地方需要注意的。

1. 打开VS2008,新建一个VC工程,选择Win32类型,Win32项目:

2. 应用程序类型选择DLL,附加选项选择到处符号,公共头文件不要选择,然后点完成即可。

3. 工程生成后需要修改属性,在配置属性的常规选项中将MFC的使用修改为“静态库中使用MFC”。

注意,这一步是必须的,否则写出来的DLL将需要在有VC2008的环境上才能运行。

4. 关注自动生成的文件MyDllTest.cpp,其中有几个实例,可以将他们删除,也可以不管他们。

5. 添加自己的接口,如:GetMyDllVersion

// 得到当前DLL的版本号 MYDLLTEST_API UINT32 GetMyDllVerion(VOID) { return 1234; }

6. 在头文件MyDllTest.h中添加声明

MYDLLTEST_API UINT32 GetMyDllVerion(VOID);

7. 添加导出符号定义文件,理论上是可以不要导出定义的,但是那样的结果就是生成的DLL中的符号名字不明确,只有定义了导出符号,才可以使得DLL中的借口函数名称得以确定。

LIBRARY "MyDllTest" EXPORTS GetMyDllVerion

8. 在项目属性中设置模块定义文件为刚才建立的symexport.def文件:

9. 生成,可以得到一个MyDllTest.dll,使用Depends工具(VC6.0自带)可以查看这个DLL中包含了多少接口以及接口名:

会发现除了我们定义的借口GetMyDllVersion外还有几个??开头的接口,他们就是那些没有在模块定义文件中定义的借口自动生成的。

10. 除了DLL外我们还会发现生成了MyDllTest.lib文件,这个lib文件可以在其他的程序使用这个DLL的时候将其连接进去,同时只要包含MyDllTest.h即可调用这个DLL中的借口了。

11. 有时候我们拿到的是别人的DLL和头文件,但是却没有LIB文件,这时就要使用另外的方法调用DLL中的接口了,例如MD5接口的使用:

// 按照MSDN中的说明定义函数原型如下 typedef struct { ULONG i[2]; ULONG buf[4]; unsigned char in[64]; unsigned char digest[16]; } MD5_CTX; typedef void (CALLBACK* MD5Init_Tpye)(MD5_CTX* context); typedef void (CALLBACK* MD5Update_Tpye)(MD5_CTX* context, unsigned char* input, unsigned int inlen); typedef void (CALLBACK* MD5Final_Tpye)(MD5_CTX* context);

// 使用MD5接口 HINSTANCE hDLL; // MD5接口是在Cryptdll.dll中的 hDLL = LoadLibrary(TEXT("Cryptdll.dll")); MD5Init_Tpye MD5Init; MD5Update_Tpye MD5Update; MD5Final_Tpye MD5Final; // 得到接口指针 MD5Init = (MD5Init_Tpye)GetProcAddress(hDLL, "MD5Init"); MD5Update = (MD5Update_Tpye)GetProcAddress(hDLL, "MD5Update"); MD5Final = (MD5Final_Tpye)GetProcAddress(hDLL, "MD5Final"); if (!MD5Init || !MD5Update || !MD5Final) { // 取得接口指针失败 FreeLibrary(hDLL); return; } MD5_CTX md5_context; MD5Init(&md5_context); MD5Update(&md5_context, src, length); MD5Final(&md5_context); // 不要忘记释放导入的DLL FreeLibrary(hDLL);

这就是目前我知道的两种使用DLL的方法了,至于还有没有其他的方法,暂时没有这方面的需求,也就不去花脑力想了。。。

VC2008如何生成及使用DLL相关推荐

  1. .NET不用代码生成器自己写一个生成Code的DLL 自动动态生成三层架构(一)概况...

    大家好,我是新灵感中的一个小灵感,今日有幸能在博客园写点自己的东西,非常的高兴,自己也从事这个职业差不多快4年了,一直没有怎么认真写过东西,非常的惭愧啊. 所以与其明天再写,还不如就从现在写起走,把自 ...

  2. 解决添加Com引用 生成的Interop.*.dll 版本号永远是1.0的问题

    在项目里面,添加对COM的引用时,自动生成了Interop.*.dll,但是这个dll的版本号永远是1.0. 如果使用InstallShield 制作安装包,进行修改安装时,这个dll不会被更新,就因 ...

  3. VC调用C#生成的类库DLL方法

    VC调用C#生成的类库DLL方法 相关代码与原文地址 http://www.panshy.com/article/Sort_Desktop/other/2013-06-25/2415.php VC调用 ...

  4. VS2013环境生成和调用DLL动态链接库

    创建动态库方法: 创建动态库是生成 .dll .lib 两个个文件 文件 -> 新建 -> 项目 -> win32控制台应用程序 项目名称:DLLGenerator 应用程序类型:D ...

  5. 如何生成动态库 .dll 的符号 .lib 文件?

    在知道拥有动态库和头文件的情况下,但没有动态库符号文件的情况下,如何静态链接动态库? 1.使用 Microsoft Visual Studio Tools 命令行命令生成 xxx.def 文件,进而使 ...

  6. VS2012生成C的dll并调用以及Python调用C的DLL

    目录 VS2012生成DLL VS2012进行DLL调用 Python调用C的DLL VS2012生成DLL 使用Win32应用程序向导! 这样就会生成一个模板,我们只要填充模板就可以了 添加一个my ...

  7. LabVIEW生成.NET的DLL——C#下调用NI数据采集设备功能的一种方法 [原创www.cnblogs.com/helesheng]

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

  8. Qt生成调用动态链接库dll

    把编译好的包含函数和变量的目标代码存储到文件中,在链接的时候让链接程序自动从文件中查找需要的代码.这个文件就是链接库,又可以分为静态链接库和动态链接库. 1. 静态链接库 链接程序从库中寻找需要的符号 ...

  9. vc调用matlab生成的C++dll库总结。

    实验室的一个项目需要调用matlab程序.经过再三考虑,决定使用vc调用matlab导出库的形式.而我主要负责与matlab程序结合的工作.以下是今天工作的简要总结.全当是个备忘吧. 1:在matla ...

最新文章

  1. 需求分析阶段项目经验
  2. 图论500题 ---- 并查集+树形dp+枚举 求解动态的最小生成树 HDU 4126
  3. 基于Springboot实现田径运动会管理系统
  4. 线性回归实例-鸢尾花数据集
  5. JZOJ 4933. 【NOIP2017提高组模拟12.24】C
  6. 谷歌开源代码评审规范:好坏代码应该这样来判断
  7. [C#]结构体和字节数组的相互转化
  8. vi/vim 按键说明
  9. 计算机html二级难度,计算机二级考试越来越难的实锤!真实数据告诉你到底难在哪里?...
  10. 假设以带头结点的循环链表表示队列_真香!20张图揭开「队列」的迷雾,一目了然...
  11. 请使用webdav_介绍下phpdav的使用功能价值
  12. 人脸方向学习(一):人脸质量评价-模糊检测方法总结一
  13. 【ERNIE】深度剖析知识增强语义表示模型——ERNIE
  14. 英文字母信息熵与冗余度计算Python实现
  15. nsupdate处理ns注意事项
  16. Python学习之——np.dot()与np.multiply()与*之间的区别
  17. 计算机视觉知识体系图,计算机视觉系统框架的新构思
  18. 如何使用笔记本无线网卡创建无线热点?
  19. js将数字金额用符号间隔 vue中使用逗号间隔数字金额-共享博客
  20. 【UI设计No5】LOGO设计

热门文章

  1. SORT、DeepSORT
  2. 【转载】RFID技术简介
  3. 第二天学习:DOS命令与计算机语言发展史
  4. 2023年全国职业院校技能大赛-信息安全管理与评估-赛题 8
  5. ZBar 源码分析 beta
  6. 【DPDK】dpdk样例源码解析之三:dpdk-l3fwd_001
  7. Visual C++ 2019中MFC图像处理编程(一) 位图文件的介绍
  8. ProcessOn 数据恢复
  9. java基础算法 闰年判断
  10. 一文全览神经网络模型