VS2012中 C++创建DLL图解

VS2012中 C++创建DLL图解

参考文章:http://hi.baidu.com/lipeiyi2006/item/df1d035734472d9509be17c0

注:由于网上关于此篇文章出处太多,自己也搞不清楚到底原作者是出自谁,在此就不做深究了,自己对于原作者表示深深的感谢!

本文主要是参考了“VS2010中 C++创建DLL图解”这篇文章,在此基础上本人总结了自己在VS2012中具体实现时遇到的问题和相应的解决方法。

 0、

  Windows API中所有的函数都包含在dll中,其中有3个最重要的DLL。

      (1)   Kernel32.dll

      它包含那些用于管理内存、进程和线程的函数,例如CreateThread函数;

      (2)   User32.dll

     它包含那些用于执行用户界面任务(如窗口的创建和消息的传送)的函数,例如CreateWindow函数;

      (3)   GDI32.dll

     它包含那些用于画图和显示文本的函数。

静态库和动态库

(1)   静态库

         函数和数据被编译进一个二进制文件(通常扩展名为.LIB)。在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其他模块组合起来创建最终的可执行文件(.Exe文件).当发布产品时,只需要发布这个可执行文件,并不需要发布被使用的静态库。

(2)   动态库

      在使用动态库的时候,往往提供两个文件:一个引入库(.lib)文件和一个DLL(.dll)文件。虽然引入库的后缀名也是”lib”,但是动态库的引入库文件和静态库文件有着本质上的区别,对一个DLL来说,其引入库文件(.lib)包含该DLL导出的函数和变量的符号名,而.dll文件包含该DLL实际的函数和数据。在使用动态库的情况下,在编译链接可执行文件时,只需要链接该DLL的引入库文件,该DLL中的函数代码和数据并不复制到可执行文件中,直到可执行程序运行时,才去加载所需的DLL,将该DLL映射到进程的地址空间外,然后访问DLL中导出的函数。这时,发布产品时,除了发布可执行文件以外,同时还要发布该程序将要调用的动态链接库。

 

一、DLL的创建 
创建项目: Win32->Win32项目,名称:MyDLL


选择DLL (D) ->完成.


1、新建头文件testdll.h
testdll.h代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

#ifndef TestDll_H_

#define TestDll_H_

#ifdef MYLIBDLL

#define MYLIBDLL extern "C" _declspec(dllimport) 

#else

#define MYLIBDLL extern "C" _declspec(dllexport) 

#endif

MYLIBDLL int Add(int plus1, int plus2);

//You can also write like this:

//extern "C" {

//_declspec(dllexport) int Add(int plus1, int plus2);

//};

#endif

 

Ps:__declspec(dllexport)的作用,它就是为了省掉在DEF文件中手工定义导出哪些函数的一个方法。当然,如果你的DLL里全是C++的类的话,你无法在DEF里指定导出的函数,只能用__declspec(dllexport)导出类。

*注:extern "C"是可选的,

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值