VS2015接口程序调用(静态链接库[.library],动态链接库[.dll])

来源:互联网 发布:什么是数据库事务 编辑:程序博客网 时间:2024/06/06 23:48

最近在写接口程序,需要使用外部程序,走了很多弯路,现总结一下,供参考。
一、静态链接库[.library],动态链接库[.dll]
这里写图片描述
在项目属性中可以看到,配置类型描述了动态库,静态库,应用程序等。一般在项目创建的时候就指定了项目类型。
静态库项目生成文件:*.lib
动态库项目生成文件:.lib,.dll
静态库项目中lib包括源程序(函数和数据);动态库lib中只是项目的导入库(包括函数和变量的符号名),不包括源程序。
二:使用准备
1:引入一个动态库(dll)或者一个静态库(lib)时一般的步骤是::

完成函数,变量声明,添加头文件 *.h配置库的目录 *.lib 将dll拷贝到可执行文件所在的目录(仅限于动态库)

2:头文件(.h)文件、.dll文件和.lib文件的关系:
2.1————.h文件是编译时需要的,因为里面有函数或变量声明。
2.2————.lib文件就有话说了,首先,对于一个静态库来说,其是以xxx.lib的形式,而对于一个动态库来说,当IDE帮我们生成了.dll文件时,还会同时生成一个xxx.lib文件,这里的.lib不是静态库,而是动态链接库的导入库(Import Libary)
2.3————.dll文件是生成的动态库,是在程序运行时动态加载的。
3:文件准备

3.1. 使用静态库需要文件:*.h,*.lib,
3.2. 使用静态库有两种方法:a:静态调用,需要文件:*.h,*.lib,*.dll
b:动态调用,需要文件:**.h,*.dll

三,使用
1:静态库使用

1.1增加 静态库中函数和数据的声明,一般是通过引入头文件(*.h)方式1.2导入库文件,有两种方式:a:显式导入,通过ID E在 项目属性-》连接器-》输入-》外部依赖                      b:隐式导入,在头文件中使用导入语句#pragma  comment(lib, "static.lib") 就可以使用了。

2:动态库使用
2.1静态调用
静态调用与静态库使用相似,只是实现了声明和实现的分离(lib【导入库】,dll)

步骤:        2.1.1增加 静态库中函数和数据的声明,一般是通过引入头文件(*.h)方式        2.1.2导入库文件,有两种方式:a:显式导入,通过ID E在 项目属性-》连接器-》输入-》外部依赖                                b:隐式导入,在头文件中使用导入语句#pragma  comment(lib, "static.lib")        2.1.3,拷贝 *.lib    *.dll到运行程序目录,一般与exe文件在同一目录         就可以使用了。

2.2动态调用
需要文件:**.h,*.dll

    //声明函数指针  这一般参照头文件书写,注意参数类型            typedef void(*lpCall)(void);    //      //创建dll句柄              HINSTANCE hDll;    //      //装载dll,注意dll路径              hDll = LoadLibrary(_T("MFCdll.dll"));            if (NULL == hDll)            {                AfxMessageBox(_T("DLL加载失败!"));            }    //      //检索指定DLL中的输出库函数地址 , GetProcAddress函数的使用            lpCall pShowDlg = (lpCall)GetProcAddress(hDll, "ShowDlg");            if (NULL == pShowDlg)            {                AfxMessageBox(_T("DLL内部函数调用失败!"));            }    //      //创建DLL对话框              pShowDlg();    //      //在恰当的时候释放动态链接库**.dll            FreeLibrary(hDll);

一般我们使用的都是动态库的静态调用。即准备:头文件(*.h),导入库文件(*.lib),动态链接库文件(*.dll)

0 1
原创粉丝点击