-
-
[旧帖]
DLL小例子(让你知道怎么写DLL而已)
0.00雪花
-
发表于:
2009-12-27 20:47
1666
-
[旧帖] DLL小例子(让你知道怎么写DLL而已)
0.00雪花
用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直播授课