当前位置:C++技术网 > 资讯 > 动态链接库小程序练练手

动态链接库小程序练练手

更新时间:2015-11-02 22:04:44浏览次数:1+次

动态链接库通常不能直接运行,也不能接收消息。他们是一些独立的文件,其中包含能被可执行程序或其他DLL调用来完成某项工作的函数。只有在其他模块调用动态链接库中的函数是,它才发挥作用。
windows API中的所用函数都是包含在DLL中,其中有三个最重要的DLL,Kernel32.dll它包含用于管理内存,进程和线程的各个函数;User32.dll它包含用于执行用户界面任务的各个函数。
在VC6.0中,动态链接库分为两种,即win32动态链接库和MFC动态链接库。win32动态链接库只包含函数,MFC动态链接库中可以包含图标,光标,位图,对话框等资源,但他并不通用。

我们打开VC6.0,建立一个基于win32DLL的工程,取名为Dll1:

进去后,我们选择一个空的程序,我们引入C++源文件,写入代码:


int  add(int a,int b)
{
 return a+b;
}

int  subtract(int a,int b)
{
 return a-b;
}
当你点击运行时就能生成一个Dll1.dll文件。
对于其他函数访问一个动态链接库文件,需要将这个动态链接库导出。导出标识符:_declspec(dllexport)
因此我们在int前面加上_declspec(dllexport),表明这个是导出函数,然后点击运行,我们在调试窗口就能看到又有两个文件生成了



.lib文件是一个引入库文件,也就是输入库文件,包含导出的函数以及变量名。
然后测试这两个导出函数,新建一个DllText工程,DllText工程基于MFCexe的对话框工程。
在对话框上加上两个button按钮,ID号为IDC_BTN_ADD以及IDC_BTN_SUBTRACT,然后建立消息响应:
我们看下源码

extern int add(int a,int b);/////表明add函数在外部定义
extern int subtract(int a,int b);/////表明subtract函数在外部定义
void CDllTestDlg::OnBtnAdd()
{
        CString str;
        str.Format("5+3=%d",add(5,3));
        MessageBox(str);
}
void CDllTestDlg::OnBtnSubtract()
{
 // TODO: Add your control notification handler code here
 CString str;
 str.Format("5-3=%d",subtract(5,3));
 MessageBox(str);
}
点击运行后,回报错:



编译器不能明确这两个函数的实现,因此报错,之前我介绍了.lib文件里面包含了函数与变量的信息,因此我们引入.lib文件
引入静态文件Dll1.lib,
#pragma comment(linker, "/export:Dll1.lib")你也可以直接在VC菜单栏的工程->属性->链接中设置:

当我们生成工程时,对出现下面的错误:

我们引入Dll1.dll动态链接库,就好了。

我们看下最后的结果: