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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BlueCY/article/details/70308238

最近在写接口程序,需要使用外部程序,走了很多弯路,现总结一下,供参考。
一、静态链接库[.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)

阅读更多

没有更多推荐了,返回首页