[DLL 02] 两种调用动态链接库的方式

本文使用Visual Studio 2017, 通过win32控制台应用程序调用dll文件。

 

0. 新建工程

① 新建工程: 文件 -> 新建 -> 项目, 模板 -> VisualC++ -> Win32 控制台应用程序 -> 确定。应用程序向导配置如下:

② 在源文件中添加新建项创建main.cpp(解决方案资源管理器 -> 项目 -> 源文件 -> 右键添加新建项 -> VisualC++ -> C++文件)

③ 配置管理器中的平台需要和dll的位数保持一致(x86,x64)。

 

1. 静态调用

main.cpp 文件内容如下

#include <iostream>

void say_hello();    // 没有给出头文件,需要在此声明函数

int main()
{
	say_hello();
	return 0;
}

将生成的动态链接库dll,静态库lib,头文件h放到工程目录下

配置属性 -> C/C++ -> 常规 -> 附加包含目录 -> 编辑, 填写dll,lib,h所在的绝对路径或者相对路径

配置属性 -> 链接器 -> 常规 -> 附加库目录 -> 编辑, 填写dll,lib,h所在的绝对路径或者相对路径

配置属性 -> 链接器 -> 输入 -> 附加依赖项 -> 编辑, 填写lib文件的名称。

将dll文件复制到生成的可执行文件目录下

生成 -> 生成解决方案

调试->开始执行(不调试)

 

2. 动态调用

动态调用无需配置目录,链接器等信息。

只需要将dll与生成的可执行文件放在同一个文件夹下即可(或者将目录信息也加入LoadLibrary的参数中)

main.cpp 文件内容如下

#include <iostream>
#include <wtypes.h>
#include <Tchar.h>

// 定义函数指针
void (* say_hello)(void);	

int main()
{
	// 加载 动态链接库
	HINSTANCE hInst = LoadLibrary(_T("say_hello.dll"));
	// 获取函数
	(FARPROC&)say_hello = GetProcAddress(hInst, "say_hello");
	// 运行函数
	say_hello();
	// 释放DLL
	FreeLibrary(hInst);
	
	return 0;
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值