动态引入方式就是使用Windows的两个API即LoadLibrary和GetProcAddress,前者用于获得DLL的句柄,后者用于获得DLL中例程的地址,这种方式之所以被称为动态的,是因为它不需要在程序的开始处把要引入的例程全部列出,只要在调用前引入,并且LoadLibrary可以指定不同的DLL,GetProcAddress可以指定不同的例程,最重要的是如果指定的DLL出错,最多是API调用失败,但不会导致程序终止,因此我们应该在程序中监视DLL的返回值,根据返回值作出相应的处理。如
typedef wstring(* PROCINIT)(int&);
(原型 wstring OutlookInit(int& a);)
 PROCINIT m_pProcInit;hinstOutlook = LoadLibrary(TEXT("OLInterface")); if (hinstOutlook != NULL) { m_pProcInit = (PROCINIT) GetProcAddress(hinstOutlook, TEXT("OutlookInit"));ProcDeInit = (PROCDEINIT) GetProcAddress(hinstOutlook, TEXT("OutlookDeInit"));ProcMail = (PROCMAIL) GetProcAddress(hinstOutlook, TEXT("OutlookCheckMail"));ProcAppoint = (PROCAPPOINT) GetProcAddress(hinstOutlook, TEXT("OutlookCheckAppointments"));}

使用 :
int aa = 100;
wstring sTmp = m_pProcInit(aa);进程调用 LoadLibrary(或 AfxLoadLibrary)以显式链接到 DLL。如果成功,函数将指定的 DLL 映射到调用进程的地址空间中并返回此 DLL 的句柄,该句柄可与用于显式链接的其他函数(如 GetProcAddress 和 FreeLibrary)一起使用。LoadLibraryLoadLibrary 尝试使用用于隐式链接的同一搜索序列来定位 DLL。如果系统无法找到 DLL 或者入口点函数返回 FALSE,LoadLibrary 将返回 NULL。如果对 LoadLibrary 的调用所指定的 DLL 模块已映射到调用进程的地址空间中,则函数仅返回 DLL 的句柄并递增模块的引用数。如果 DLL 有入口点函数,则操作系统在调用 LoadLibrary 的进程上下文中调用此函数。如果由于以前调用了 LoadLibrary 但没有相应地调用 FreeLibrary 函数而导致 DLL 已经附加到进程,则不会调用此入口点函数。加载扩展 DLL 的 MFC 应用程序应使用 AfxLoadLibrary 而不是 LoadLibrary。AfxLoadLibrary 在调用 LoadLibrary 之前处理线程同步。AfxLoadLibrary 的接口(函数原型)与 LoadLibrary 相同。如果出于某种原因 Windows 无法加载 DLL,进程可以尝试从错误恢复。例如,进程可通知用户所发生的错误,并让用户指定 DLL 的其他路径。安全说明 如果代码将在 Windows NT 4 或 Windows 2000 上运行,请务必要指定任何 DLL 的完整路径名。


动态调用DLL. LoadLibrary和GetProcAddress相关推荐

  1. 通过GetProcAddress函数动态调用dll中地函数,是否必须通过extern C声明导出函数?(转)...

    通过GetProcAddress函数动态调用dll中的函数,是否必须通过extern "C"声明导出函数? [已结贴,结贴人:darongtou] 如题,网上搜了N多资料,一直找不 ...

  2. GetProcAddress()函数动态调用DLL中的函数,是否必须通过extern C声明导出函数?

    GetProcAddress()函数动态调用DLL中的函数,是否必须通过extern C声明导出函数? 通过GetProcAddress函数动态调用dll中的函数,是否必须通过extern " ...

  3. C#程序实现动态调用DLL的研究(转)

    摘 要:在<csdn开发高手>2004年第03期中的<化功大法--将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资 ...

  4. Delphi中动态调用DLL的方法

    Delphi中动态调用dll的方法如下: function CallFunc(dllname, funcname: string; const param: array of const): DWOR ...

  5. VB静态调用与动态调用dll详解

    [[请注意]]:在以下语法格式中,请注意 [函数名] 的[大小写]!!! 静态与动态比较: 静态调用简单,动态调用麻烦:静态调用占用资源多,动态调用占用资源少:正所谓鱼和熊掌不可兼得. 静态调用定义: ...

  6. 反射动态调用DLL类库测试

    定义:可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的名称.限定符和参数等.有了反射,即可对每一个类型了如指掌 ...

  7. CorelDRAWX4的VBA插件开发(三十一)使用C++制作动态连接库DLL辅助VBA构键强大功能-(5)在VBA中动态调用DLL文件

    我们先来看一下动态调用的截图 先上代码 '静态调用 Public Declare Function wodedll Lib "E:\VS-DLL\conglingkaishi\Debug\C ...

  8. 【VB技巧】VB静态调用与动态调用dll详解

    [[请注意]]:在以下语法格式中,请注意 [函数名] 的[大小写]!!!静态与动态比较:静态调用简单,动态调用麻烦:静态调用占用资源多,动态调用占用资源少:正所谓鱼和熊掌不可兼得.静态调用定义:就是常 ...

  9. LoadLibrary()动态调用dll失败,GetLastError()返回126

    问题: 写项目时要调用a.dll,a.dll依赖a1.dll,路径确保无误,dll也在对应的目录,依赖dll也在,使用LoadLibrary()加载时会失败,用GetLastError()返回126. ...

最新文章

  1. TensorFlow2020:如何使用Tensorflow.js执行计算机视觉应用程序?
  2. 关于Windows Vista的系统修复
  3. iOS 组件化 —— 路由设计思路分析
  4. 测试常用shell语句——数值,数组类型;函数创建
  5. dp_c_区间dp_g
  6. Django(模板语言-自定义filter和simple_tag)
  7. 移动平均线ma分析_使用动态移动平均线构建交互式库存量和价格分析图
  8. 加入初创企业需要想清楚的几个问题
  9. html 缩略图点击预览,jQuery图片相册点击缩略图弹出大图预览特效
  10. 基于Spark机器学习和实时流计算的智能推荐系统
  11. 找到恶意软件包:Go 语言生态系统中的供应链攻击是怎样的?
  12. 从JavaScript预编译看function的生存时间
  13. iPhone/iPad各种文件路径详解 帮助了解自己的iphone和ipad
  14. 如何用html语言制作圆角矩形,webGL中圆角矩形的绘制
  15. 计算机操作系统的加密与恢复,当在 Windows中设置 FIPS 兼容策略时,BitLocker 的恢复密码Windows...
  16. 印象笔记android,Android
  17. ​iPhone 14 Pro 全系降价 700 元;Gmail 之父:有了 ChatGPT,搜索引擎活不过两年了|极客头条...
  18. 在 Node.js 应用中集成 Redis
  19. CQF笔记M1L3泰勒级数和转移概率密度函数
  20. C# 之 结构体详解

热门文章

  1. superset 细思极恐的代码
  2. 元件基础知识——电阻
  3. 如何打开计算机用户账户控制,Win7系统下每次打开软件都会出现用户账户控制的解决方法...
  4. 体系认证,荣誉证书,商标版权
  5. [国产PLC]耐特稳定PLC在多色印刷机械怎么运用
  6. 判断一个数字是否为回文数字
  7. 德国海曼HTPA 32x32d热成像传感器代替MLX90640之EEPROM数据读取和解析
  8. HTPA32x32d红外热电堆阵列传感器的详细资料介绍
  9. 单片机声光电子琴程序流程图_单片机声光电子琴,含原理图,源代码(c代码),成品图...
  10. 计算机如何用公式计算综合分,各省综合分计算公式汇总