首页
社区
课程
招聘
[旧帖] DLL小例子(让你知道怎么写DLL而已) 0.00雪花
发表于: 2009-12-27 20:47 1666

[旧帖] DLL小例子(让你知道怎么写DLL而已) 0.00雪花

2009-12-27 20:47
1666
用VC++新建一个Win32 Dynamic-Link Library类的空工程,取名为:DLL1,添加源文件:DLL1.cpp,代码:
int add(int a,int b)
{
        return a+b;
}
int sub(int a,int b)
{
        return a-b;
}
Build一下就可以在该工程的Debug目录下看到一个DLL1.dll文件了,这就是生成的动态链接库文件。
为了让DLL导出一些函数,需要在每一个将要被导出的函数前面添加标示符:_declspec(dllexport)
修改DLL1.cpp代码:
_declspec(dllexport) int add(int a,int b)
{
        return a+b;
}
_declspec(dllexport) int sub(int a,int b)
{
        return a-b;
}
重新Build一下,又生成了两个新文件:DLL1.lib和DLL1.exp,DLL1.lib就是引入库文件,该文件中保持的是DLL1.dll中导出的函数和变量的符号名;DLL1.exp暂时不管。
这时,DLL1.dll已经导出了两个函数,再编写一个测试程序测试一下动态链接库。
新建一个基于对话框的MFC应用程序DllTest,放两个按钮,单击事件调用前面的两个函数。
但在调用之前,为了让编译器知道这两个函数,需在前面加上:
extern int add(int a,int b);
extern int sub(int a,int b);
Build一下,此时是有错误的,链接错误,
解决方法:复制DLL1.lib到DllTest目录下,在DllTest程序中,选择【工程/设置】,单击Link选项卡,在Object/library modules中注入dll1.lib
再Build一下,这时可成功生成DllTest.EXE文件,但是还是无法运行的,嘻嘻
为了让可执行文件能够正常运行,就必须让加载模块能够找到该应用程序所需的所有动态链接库,
所以需把DLL1.dll放置到DllTest目录下,这时运行DllTest程序,成功了。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 18
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
学习,学习了
2009-12-27 20:50
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习,学习了
2009-12-27 21:13
0
雪    币: 546
活跃值: (1605)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
4
貌似在孙鑫老师的vc视频里看过。
2009-12-27 21:55
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
学习啦。。等会试试
2009-12-27 22:11
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学习一下,支持一下
2009-12-28 09:55
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
路过学习,DLL写法
2009-12-28 16:43
0
雪    币: 28
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
“我是土匪”也太厉害 了吧,这样都看到出来时孙鑫老师的,佩服佩服哟
2010-4-2 10:13
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
是基于MFC的吗?
2010-4-2 11:40
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
学习了,感觉有点进步
2010-4-2 14:42
0
雪    币: 17
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
照葫芦画瓢做了,但是很迷茫呀
2010-4-2 14:45
0
雪    币: 316
活跃值: (326)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
厉害啊,嘿嘿。知道了
2010-4-2 15:04
0
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
C++与汇编相结合   牛人
2010-4-2 15:21
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
楼主貌似用的是隐式调用dll库,还一种显式调用的吧~~
2010-4-2 16:05
0
雪    币: 78
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
路过,希望楼主能够发点高深的内容,比如怎样控制dll共享、dll原理等,只是建议,呵呵
2010-4-2 16:35
0
游客
登录 | 注册 方可回帖
返回
//