【无标题】

dll动态加载函数

1.介绍WIN64宏
这个宏通常在 Windows 64 位编译器中定义,表示当前代码正在为 64 位 Windows 系统进行编译。

2.LoadLibrary—用于动态加载 DLL(动态链接库)文件

HMODULE LoadLibrary(LPCTSTR lpFileName);

返回值:

  • 如果加载成功,LoadLibrary 函数返回一个 HMODULE 类型的句柄,表示已加载的 DLL 模块。这个句柄可以在后续的 GetProcAddress 和 FreeLibrary 函数调用中使用。
  • 如果加载失败,LoadLibrary 函数返回 NULL。可以通过调用 GetLastError 函数获取更多关于错误的信息。
    参数:
  • pFileName:指向一个以 null 结尾的字符串,表示要加载的 DLL 文件的路径。可以是绝对路径或相对路径。
    3.TEXT()–用于在 Windows 平台上编写跨编译器和 Unicode/ANSI 字符集兼容的代码
    TEXT() 宏用于根据当前的编译器设置和字符集自动选择正确的字符串类型。

示例:

#ifndef WIN64
  h_crypto_dll = LoadLibrary(TEXT("libcrypto-1_1.dll"));
  # libcrypto-1_1.dll 这里应该是一个相对路径,或者绝对路径,如果在pro文件中引入libcrypto-1_1.dll,则可以直接写
  return h_crypto_dll;
#endif

tips:在使用WIN64做多平台编译适配时,要保证所有设计到多平台的逻辑均用#ifndef涵盖

4.GetProcAddress----用于从 DLL 文件中获取指定函数的地址。

FARPROC GetProcAddress(
  HMODULE hModule,
  LPCSTR  lpProcName
);
`参数:

hModule:指向一个已加载的 DLL 模块的句柄,由 LoadLibrary 函数返回。
lpProcName:指向一个以 null 结尾的字符串,表示要获取地址的 DLL 中的函数名。
返回值:

如果函数地址获取成功,GetProcAddress 函数返回一个指向指定函数的指针。可以使用这个指针直接调用 DLL 中的函数。
如果函数地址获取失败,GetProcAddress 函数返回 NULL。可以通过调用 GetLastError 函数获取更多关于错误的信息。`


示例:

  #定义一个函数指针 
  #定义一个名为BIO_new_mem_buf_func的函数指针,指向的函数返回值为BIO* 参数为(const void* buf, int len)

typedef BIO* (BIO_new_mem_buf_func)(const void buf, int len);
#动态加载函数
BIO_new_mem_buf_func my_bio_new_mem_buf =
(BIO_new_mem_buf_func)GetProcAddress(h_crypto_dll, “BIO_new_mem_buf”);
#判断是否加载成功
if (!my_bio_new_mem_buf) {
QMessageBox::warning(this, “Error”, “GetProcAddress失败”, QMessageBox::Ok);
return;
}
#调用自己动态加载的函数
BIO* keybio = my_bio_new_mem_buf(Private_KEY, -1);
assert(keybio);


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值