在没有.h和.lib文件时,需要函数指针和WIN32 API函数 LoadLibrary, GetProcAddress 和FreeLibrary

只需要.dll文件即可(将.dll文件置入工程目录中)。

LoadLibrary

进程调用 LoadLibrary以显式链接到 DLL。 如果函数执行成功,它会将指定的 DLL 映射到调用进程的地址空间中并返回该 DLL 的句柄。

此句柄可以与其他函数(如 GetProcAddress 和FreeLibrary)一起在显式链接中使用。

LoadLibrary 将尝试使用用于隐式链接的相同搜索序列来查找 DLL。 如果系统无法找到所需的 DLL 或者入口点函数返回 FALSE,

则 LoadLibrary 将返回 NULL。 如果对 LoadLibrary 的调用所指定的 DLL 模块已映射到调用进程的地址空间中,

则该函数将返回该 DLL 的句柄并递增模块的引用数。

如果 DLL 具有入口点函数,则操作系统将在调用 LoadLibrary 的线程的上下文中调用此函数。

如果由于以前调用了 LoadLibrary,但没有相应地调用 FreeLibrary 函数,从而导致已经将 DLL 附加到进程,则不会调用此入口点函数。

如果 Windows 无法加载 DLL,则进程会尝试从错误中恢复。 例如,进程会通知用户所发生的错误,并要求用户指定 DLL 的其他路径。

GetProcAddress

显式链接到 DLL 的进程调用 GetProcAddress 来获取 DLL 导出函数的地址。

使用返回的函数指针调用 DLL 函数。

GetProcAddress 将(由 LoadLibrary或 GetModuleHandle 返回的)DLL 模块句柄和要调用的函数名或函数的导出序号用作参数。

由于是通过指针调用 DLL 函数并且没有编译时类型检查,需确保函数的参数是正确的,以便不会超出在堆栈上分配的内存和不会导致访问冲突。

帮助提供类型安全的一种方法是查看导出函数的函数原型,并创建函数指针的匹配 typedef。

FreeLibrary

处理链接到 DLL 的显式调用函数,FreeLibrary 当不再需要 DLL 模块。 此函数递减模块的引用数,如果引用数为零,此函数便从进程的地址空间中取消模块的映射。

#include <iostream>
#include <windows.h>               //使用函数和某些特殊变量
typedef void (*DLLFunc)(int,int);  //确定调用函数的形参
int main()
{DLLFunc dllFunc;HINSTANCE hInstLibrary = LoadLibrary("sub.dll");//加载.dllif (hInstLibrary == NULL){FreeLibrary(hInstLibrary);}dllFunc = (DLLFunc)GetProcAddress(hInstLibrary, "sub");//第二个参数为要调用的函数名称if (dllFunc == NULL){FreeLibrary(hInstLibrary);}dllFunc(5,4);FreeLibrary(hInstLibrary);return(1);
}

动态链接库 仅有.dll文件时候的使用方法相关推荐

  1. vcruntime140.dll文件丢失的解决方法

    打开电脑浏览器顶部栏目输入[dll修复程序.site]然后点击进入下载vcruntime140.dll文件 下载完成vcruntime140.dll文件安装包.右键进行解压,然后再右键点击以管理员身份 ...

  2. java 加载dll后打包_让Jacob从当前路径读取dll文件及相关打包方法

    让Jacob从当前路径读取dll文件及相关打包方法 独立观察员2013.08.12 Jacob  LibraryLoader.class修改版代码 功能:让jacob可在当前路径下的dll文件夹内读取 ...

  3. dll文件是什么语言编写的_Win7系统当中libeay32.dll文件丢失的解决方法是什么?...

    Win7系统libeay32.dll文件丢失应该如何解决?有不少用户在打开电脑运行游戏的时候却会出现"libeay32.dll文件丢失"的提示,用了很多方法却还是无法解决,那么该问 ...

  4. java web配置dll文件_JavaWeb项目中dll文件动态加载方法解析(详细步骤)

    相信很多做Java的朋友都有过用Java调用JNI实现调用C或C++方法的经历,那么Java Web中又如何实现DLL/SO文件的动态加载方法呢.今天就给大家带来一篇JAVA Web项目中DLL/SO ...

  5. 让Jacob从当前路径读取dll文件及相关打包方法

    让Jacob从当前路径读取dll文件及相关打包方法 独立观察员2013.08.12 Jacob  LibraryLoader.class  修改版代码 功能:让jacob可在当前路径下的dll文件夹内 ...

  6. sharepoint 使用命令行注册dll文件到gac的方法

    使用命令行注册dll文件到gac的方法: gacutil.exe -i D:\SPFormLoginProject.dll 删除gac的dll方法: gacutil /u "SPFormLo ...

  7. 无法启动此程序 因为计算机中丢失xlive,光环2xlive.dll文件丢失的解决方法

    很多小伙伴在使用电脑玩游戏的时候,系统提示无法启动此程序,因为计算机中丢失xlive.dll.尝试重新安装此程序以解决此问题,这是怎么一回事呢?因为该文件的缺失或者没有注册导致的,具体的解决方法下面一 ...

  8. vs2019报错:无法定位程序输入点于动态链接库的XXX.dll文件的解决方法

    项目场景 vs2019报错:无法定位程序输入点于动态链接库XXX.dll文件上 我的上述问题是在VS 2019 中 用c++处理点云时遇到的. 解决方案: 在网上查阅了相关的解决方法,总结如下: 1. ...

  9. 电脑提示MSVCP140.dll文件丢失的解决方法

    打开软件或者游戏出现运行出现报错,提示"由于找不到 MSVCP140.dll,无法继续执行代码.重新安装程序可能会解决此问题.",这一般是什么原因导致了这个问题,我们要如何解决?下 ...

最新文章

  1. Apache Kylin v2.5.0正式发布,开源分布式分析引擎
  2. 二进制数据格式MessagePack:比JSON更快更轻巧
  3. 46 jQuery属性操作
  4. c++输出方块_C/C++编程笔记:DFS 深度优先搜索的基本思想,含实例讲解
  5. OpenDDS安装与开发
  6. Oracle select 基础查询语句 day02
  7. sql server 修改表字段
  8. 纪中A组模拟赛总结(2021.7.15)
  9. 5.Prometheus 监控技术与实践 --- PromQL
  10. 洛谷试炼场---提高历练地
  11. SMOTE算法代码实现
  12. 学习笔记 | Inverting Gradients--How easy is it to break privacy in federated learning
  13. OpenCv之黑白上色小技巧,奥黛丽赫本神颜,超惊艳滴~
  14. this关键字的作用
  15. python+tkinter实现抖音爆款辞职信小程序
  16. Markdown内嵌图片的解决方法
  17. 启用数据空间:让VirtualBox虚拟机中的Ubuntu 10.10和XP主机互通有无
  18. 笔记本损耗60 计算机提示,无需第三方软件,查看笔记本电脑电池损耗程度的方法...
  19. python 矢量化计算
  20. [激光原理与应用-24]:《激光原理与技术》-10- 激光产生技术-调Q技术、Q开关、Q驱动器

热门文章

  1. 【PyQt5】QT designer + eclipse 集成开发
  2. HTML的footer置于页面最底部
  3. Solr的安装和使用
  4. Ubuntu DNS bind9 配置
  5. Python安装scikit-learn包
  6. 去除内存上的警告,避免程序崩掉
  7. MapReduce操作HBase
  8. WSDL文件生成WEB service server端C#程序
  9. 网页里如何使用js禁用控制台
  10. maskView与CAGradientLayer那回事儿