苏州网推广网站建设,一个网站备案两个域名吗,甘南网站建设公司,商务网站建设与维护C动态库
动态库文件#xff08;Dynamic Link Library#xff0c;DLL#xff09;是程序在运行时所需要调用的库。静态库文件是程序在编译时所需要调用的库。
1 环境介绍
VS版本#xff1a;VS2017
编程语言#xff1a;C
2 功能介绍
使用VS2017项目模板创建C动态库生成…C动态库
动态库文件Dynamic Link LibraryDLL是程序在运行时所需要调用的库。静态库文件是程序在编译时所需要调用的库。
1 环境介绍
VS版本VS2017
编程语言C
2 功能介绍
使用VS2017项目模板创建C动态库生成工程编写功能函数并生成动态库然后再创建一个C工程调用动态库中的功能函数进行测试。
3 创建动态库
3.1 新建“具有导出项的(DLL)动态链接库”模板
在“新建项目”窗口中选择“Visual C - Windows桌面 - 具有导出项的(DLL)动态链接库”并设置项目名称和位置。本示例的名称设为Dll_Library存放在G:\C\Practices中。
3.2 实现功能函数
创建完成后该项目下会自动生成一个示例模板Dll_Library.h和Dll_Library.cpp。在.h文件中进行函数申明或类定义在.cpp文件中进行实现。
3.2.1 Dll_Library.h
#ifdef DLLLIBRARY_EXPORTS
#define DLLLIBRARY_API __declspec(dllexport)
#else
#define DLLLIBRARY_API __declspec(dllimport)
#endif// 模板中自动提供的示例
// 此类是从 dll 导出的
class DLLLIBRARY_API CDllLibrary
{
public:CDllLibrary(void);// TODO: 在此处添加方法。static void Print();
};extern DLLLIBRARY_API int nDllLibrary;
extern DLLLIBRARY_API int fnDllLibrary(void);// 自己编写的功能函数
extern DLLLIBRARY_API void Print(void);
extern DLLLIBRARY_API int sum(int a, int b);3.2.2 Dll_Library.cpp
// Dll_Library.cpp : 定义 DLL 的导出函数。#include pch.h
#include framework.h
#include Dll_Library.h
#include iostream
using namespace std;// 这是导出变量的一个示例
DLLLIBRARY_API int nDllLibrary 0;// 这是导出函数的一个示例。
DLLLIBRARY_API int fnDllLibrary(void)
{cout 调用fnDllLibrary成功 endl;return 0;
}// 这是已导出类的构造函数。
DLLLIBRARY_API CDllLibrary::CDllLibrary()
{return;
}
// 这是实现导出类中的成员函数
DLLLIBRARY_API void CDllLibrary::Print()
{cout 通过CDllLibrary进行Print endl;
}// 实现自己定义的功能函数
DLLLIBRARY_API void Print(void)
{cout 直接进行Print endl;
}DLLLIBRARY_API int sum(int a, int b)
{int c a b;return c;
}3.3 编译生成动态库
右键点击项目选择“生成”来编译生成动态库。
3.4 调用动态库中功能函数
在“新建项目”窗口中选择“Visual C - Windows桌面 - 控制台应用”并设置项目名称和位置。本示例的名称设为UseDLL存放在G:\C\Practices中。
3.4.1 UseDLL.cpp
#include Dll_Library.h
#include iostream
// 使用DLLLIBRARY.lib
#pragma comment(lib, DLLLIBRARY.lib)using namespace std;
int main()
{int a fnDllLibrary();cout DLL中的变量nDllLibrary: nDllLibrary endl;CDllLibrary::Print();Print();int b sum(12, 34);cout 求和: b endl;return 0;
}3.4.2 链接.h头文件
由于Dll_Library.h不在UseDLL项目目录中会提示#include Dll_Library.h引用失败。
3.4.2.1 复制Dll_Library.h到UseDLL项目目录中
该方法虽然能够解决该问题但是在后续修改Dll_Library项目后仍需要重新复制。
3.4.2.2 在UseDLL中配置附加包含目录
右键点击UseDLL项目选择“属性”在属性页窗口中
将“配置”选择为“所有配置”“平台”选择为“所有平台”在“配置属性 - C/C - 常规 - 附加包含目录”中添加Dll\_Library.h所在目录的路径。
3.4.3 链接.lib文件
在使用 #pragma comment(lib, DLLLIBRARY.lib)时默认和UseDLL的.cpp文件在同一文件夹下。将DLLLIBRARY.lib文件复制到UseDLL.cpp的同一文件夹下也能够解决问题但后续修改时仍然需要复制。
3.4.3.1 在UseDLL中配置附加库目录
右键点击UseDLL项目选择“属性”在属性页窗口中
在“配置属性 - 链接器 - 输入 - 附加依赖项”中添加 DLLLIBRARY.lib。
3.4.4 链接.dll文件
当调试运行程序时会出现“找不到.dll文件”的错误需要将dll文件拷贝到项目运行目录下此示例下需要拷贝到G:\C\Practices\UseDLL\Debug下通常在程序发布时要这么做但是在调试时不建议这么做因为后续修改时需要重新拷贝复制。
3.4.4.1 在UseDLL中配置调试环境
右键点击UseDLL项目选择“属性”在属性页窗口中
在“配置属性 - 调试 - 环境”中添加DLLLIBRARY.dll所在的目录路径。
3.5 运行结果