visual studio上C++库加载方式及方法:动态库静态加载、动态库动态加载、静态库加载

4 篇文章 0 订阅
1 篇文章 0 订阅

visual studio上C++库加载方式及方法:动态库静态加载、动态库动态加载、静态库加载


动态库静态加载

第一步:生成dll:

  1. 新建vs项目
  2. 添加.h .cpp文件
  3. 设置vs项目属性
    1. 更改配置属性为动态态库,选择,项目->属性->常规->配置类型->动态库(dll)
    2. 添加编译宏,选择,“项目->属性->C/C++ ->预处理器->预处理器定义”中添加 APIEXPORT 宏
  4. 生成解决方案

add.h文件内容

#pragma once

#ifdef APIEXPORT
#define EXTERN_API extern "C" __declspec(dllexport)
#else
#define EXTERN_API extern "C" __declspec(dllimport)
#endif

EXTERN_API int add(int elm1, int elm2);

add.cpp文件内容

#include "add.h"

int add(int elm1, int elm2)
{
	return elm1+ elm2;
}

第二步:加载dll:

  1. 新建vs项目
  2. 添加主程序入口函数.cpp文件(包含main函数的源文件)
  3. 添加第一步生成dll中的.h文件.dll文件.lib文件
    1. .h .lib可随意放置,使用时,指定正确的路径即可
    2. 放置.dll文件在和.exe文件同一目录下

main.cpp文件内容

//动态库静态加载
#include <iostream>
#include "add.h"//包含头文件
#pragma comment(lib,"../Debug/libMathFunctions.lib")//指定.lib文件的位置
int main()
{
	std::cout<<add(1, 2);
	return 0;
}

动态库动态加载

第一步:生成dll:

此步骤参考动态库静态加载第一步:生成dll:

第二步:加载dll:

  1. 新建vs项目
  2. 添加主程序入口函数.cpp文件(包含main函数的源文件)
    1. 使用Windows库函数加载dll
    2. LoadLibraryA 加载dll
    3. GetProcAddress 获取函数地址
    4. FreeLibrary 释放句柄
  3. 添加第一步生成dll中的.dll文件.lib文件
    1. .lib可随意放置,使用时,指定正确的路径即可
    2. 放置.dll文件在和.exe文件同一目录下

main.cpp文件内容

//动态库动态加载
#include <iostream>
#include <Windows.h>
int main()
{
	HINSTANCE h = LoadLibraryA("libMathFunctions.dll");//第一步
	typedef int(*FunPtr)(int a, int b);//定义函数指针
	if (h == NULL)
	{
		FreeLibrary(h);
		printf("load lib error\n");
	}
	else
	{
		FunPtr funPtr = (FunPtr)GetProcAddress(h, "add");//第二步
		if (funPtr != NULL)
		{
			int result = funPtr(8, 3);
			printf("8 + 3 =%d\n", result);
		}
		else
		{
			printf("get process error\n");
			printf("%d", GetLastError());
		}
		FreeLibrary(h);//第三步
	}
	return 0;
}

静态库加载

第一步:生成lib:

  1. 新建vs项目
  2. 添加.h .cpp文件
  3. 设置vs项目属性
    1. 更改配置属性为动态态库,选择,项目->属性->常规->配置类型->静态库(lib)
  4. 生成解决方案

add.h文件

#pragma once
int add(int elm1, int elm2);

add.cpp文件

#include "add.h"
int add(int elm1, int elm2)
{
	return elm1 + elm2;
}

第二步:加载dll:

  1. 新建vs项目
  2. 添加主程序入口函数.cpp文件(包含main函数的源文件)
  3. 添加第一步生成lib中的.lib文件.h文件
    1. .lib .h文件可随意放置,使用时,指定正确的路径即可

main.cpp文件

//静态库加载
#include <iostream>
#include "math/add.h"
#pragma comment(lib,"../Debug/libMathFunctions.lib")
int main()
{
	std::cout << add(1, 2);
	return 0;
}

注意事项

  1. 动态库需要使用__declspec(dllexport)导出和 __declspec(dllimport)加载
  2. 静态库不需要__declspec(dllexport)和 __declspec(dllimport)

  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
动态库静态库的编写方式基本相同,只是在编译链接时需要采用不同的方式。以下是C++动态库静态库的编写方法: ### 静态库 1. 创建静态库项目:打开Visual Studio,选择“新建项目”,然后选择“Win32控制台应用程序”,输入项目名称和路径,点击“确定”按钮。在弹出的窗口中选择“静态库”类型,然后点击“下一步”按钮,最后点击“完成”按钮。 2. 编写文件代码:在项目中添加源文件,编写文件的代码,并在头文件中声明需要导出的函数和类。 3. 生成静态库文件:在编译链接时将代码编译成静态库文件,可以手动编译或在Visual Studio中配置。在Visual Studio中,可以选择“生成”菜单中的“生成解决方案”或“生成项目”命令生成静态库文件。生成的静态库文件通常以.lib为扩展名。 4. 使用静态库:在使用静态库的应用程序中,需要在编译链接时将静态库文件链接到可执行文件中。可以在应用程序的项目属性中配置链接选项,将静态库文件添加到链接器的附加依赖项中。在代码中包含头文件即可使用静态库中的函数和类。 ### 动态库 1. 创建动态库项目:打开Visual Studio,选择“新建项目”,然后选择“Win32控制台应用程序”,输入项目名称和路径,点击“确定”按钮。在弹出的窗口中选择“动态链接(DLL)”类型,然后点击“下一步”按钮,最后点击“完成”按钮。 2. 编写文件代码:在项目中添加源文件,编写文件的代码,并在头文件中声明需要导出的函数和类。需要使用__declspec(dllexport)关键字将需要导出的函数或类标记为可导出。 3. 生成动态库文件:在编译链接时将代码编译成动态库文件,可以手动编译或在Visual Studio中配置。在Visual Studio中,可以选择“生成”菜单中的“生成解决方案”或“生成项目”命令生成动态库文件。生成的动态库文件通常以.dll为扩展名。 4. 使用动态库:在使用动态库的应用程序中,需要在运行时加载动态库文件,并使用GetProcAddress函数获取动态库中需要使用的函数或类。在代码中包含头文件即可使用动态库中的函数和类。在编译链接时需要指定动态库文件的路径和名称。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值