一、VS2013动态库文件的创建
1、新建项目,Visual C++,win32项目,输入项目名称和项目路径,例如项目名称如test_lib,解决方案名称默认和项目名称相同,也可以修改为其他名称,例如dll_test,点击确定。
2.进入到应用程序向导,点击应用程序设置
3.选择DLL,勾选空项目,点击完成。
4.之后会自动创建一个空项目如下:
5.选择源文件右键,添加新文件,创建test_lib.c文件
6.同理选择头文件右键,添加创建test_lib.h
7.创建完成如下:
8.向test_lib.h添加内容:
_declspec(dllexport):为导出标志
AB_EXPORTS int test(void) 用导出标志修饰函数表示此函数为导出函数,即导出给外部调用。
#ifndef _TEST_LIB_H_
#define _TEST_LIB_H_
#include <stdint.h>
#include <time.h>
#if (defined WIN32 || defined _WIN32 || defined WINCE)
#define AB_EXPORTS __declspec(dllexport)
#else
#define AB_EXPORTS extern
#endif
#ifdef __cplusplus
extern "C" {
#endif
AB_EXPORTS int test(void);
#ifdef __cplusplus
};
#endif
#endif //_TEST_LIB_H_
9.向test_lib.c添加如下内容
#include <stdio.h>
#include "test_lib.h"
int test(void)
{
printf("Helloworld\n");
return 0;
}
10.菜单栏选择生成解决方案,此时在项目所在目录下的文件就生成了test_lib.lib和test_lib.dll
二、使用刚才创建的动态库
1、新建项目命名为test_demo,解决方案选择“添加到解决方案”,如下图选择dll_test,点击确定
2.点击应用程序设置,选择控制台应用程序,勾选空项目,点击完成。
3.可以看到同一个解决方案下面创建了两个项目
4.选择test_demo,右键“设置为启动项”, 在test_demo项目创建demo.c文件
5.demo.c里添加如下代码,test()即为dll库里的函数,此时dll库还没添加到test_demo项目,直接编译会报错
#include <stdio.h>
int main(void)
{
test();
return 0;
}
6.选择资源文件,右键添加现有项,选择test_lib.dll和test_lib.lib
7.添加之后如下,需要注意的是由于这里两个项目都在同一个解决方案,test_lib生成的库和test_demo生成的可执行文件都在同一个解决方案dll_test的输出Debug目录,因此直接添加两个库没有问题,如果两个项目生成的库和可执行文件不在同一个目录的话,需要先把库文件复制到test_demo生成的可执行文件目录再添加
8.再次编译test_demo项目则编译成功并能正常运行,但是会报未定义函数test()
9.将test_lib.h复制到demo.c同目录下,选择头文件添加现有项目,如下:
10.在demo.c添加头文件“include “test_lib.h””,再次编译就不会报错了
注意:
1.本项目要确保库文件和可执行文件在同一目录,头文件和调用demo.c文件在同目录再添加的,否则会出现找不到头文件和找不到库的错误。
如果要配置支持头文件和demo.c在不同目录,或者库文件和可执行文件在不同目录的话需要告诉编译器头文件test_lib.h的位置(见包含目录)、引导库位置(见库目录)及其名字(见附加依赖项)
2.如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。