调用DLL文件的两种方法(显式调用/隐式调用)完整示例

本文深入解析DLL(动态链接库)的显式与隐式调用方法,包括LoadLibrary(), GetProcAddress(), FreeLibrary()的使用及dllimport如何导入DLL函数。通过实例代码展示,帮助读者掌握DLL的灵活应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. DLL是什么

可以参考 https://zhuanlan.zhihu.com/p/146546063 这篇文章

下面说一下我的理解

2. DLL显式调用

LoadLibrary()

GetProcAddress()

FreeLibrary()   三步

(1)LoadLibrary() 加载dll并返回一个句柄,可以是HMODULE或者HINSTANCE(HINSTANCE在win32下与HMODULE是相同的东西,在Win32下还存在主要是因为win16)

(2)然后用GetProcAddress()获得DLL文件中函数的的地址,(函数的入口点)之后就可以调用dll中的函数了

(3)最后要用FreeLibrary(HMODULE)卸载dll

优点:可以决定何时记载和卸载dll,充分体现DLL的灵活性。

缺点:调用繁琐。

完整示例代码

#include "testDLL.h"

#pragma  comment(lib,"testDLL.lib")

LPCSTR  testFun("test");
HMODULE hModule = LoadLibraryW(L"testDLL.dll");
if (hModule != NULL) {
	GetProcAddress(hModule, testFun);
}
//调用testFun
testFun();

FreeLibrary(HModule);//卸载dll

 

3. DLL隐式调用

(1)读入DLL对应的testdll.lib文件。

(2)dllimport导出dll里面的函数

通过这两步就可以在程序里面调用

完整示例代码

#pragma  comment(lib,"testDLL.lib")
extern "C" _declspec(dllimport)void testFun(para1,para2);


//调用testFun
testFun(para1,para2);//示意一下,假设你自己写的testFun函数有两个参数

这里需要DLL文件以及它对应的.h文件,其实只有DLL文件也是可以的,咱们下期再说。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值