动态调用DLL. LoadLibrary和GetProcAddress
来源:互联网 发布:centos 查看目录 编辑:程序博客网 时间:2024/05/17 08:30
动态引入方式就是使用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 的完整路径名。
0 0
- 动态调用DLL. LoadLibrary和GetProcAddress
- GetProcAddress() LoadLibrary() DLL
- 用LoadLibrary和GetProcAddress函数调用dll的代码有问题
- LoadLibrary 和 GetProcAddress、FreeLibrary
- LoadLibrary 和 GetProcAddress、FreeLibrary
- LoadLibrary 和 GetProcAddress、FreeLibrary
- LoadLibrary 、 GetProcAddress和FreeLibrary
- 动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)
- 动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)
- LoadLibrary,GetProcAddress
- LoadLibrary和GetProcAddress获得API的地址
- 使用LoadLibrary调用DLL
- 通过LoadLibrary() 与 GetProcAddress()获得Dll内的函数
- 解析LoadLibrary,GetProcAddress,FreeLibrary
- dll动态加载,LoadLibrary和LoadLibraryEx的区别
- LoadLibrary 调用 dll 中的 class
- 显试调用DLL------GetProcAddress的使用
- [DLL]DLL概述和动态调用DLL
- 死循环测试
- block
- Qt之自定义提示框(类似QMessageBox)
- QT 中QDateEdit 的时间改变事件---信号与槽
- python 的re模块的使用
- 动态调用DLL. LoadLibrary和GetProcAddress
- iOS7下隐藏status bar的详细研究
- java多线程中的异常处理 - 异常处理在多线程中的原则
- Eclipse中Cannot nest src folder解决方法
- 各种链接
- 实现无密码登录Win8系统的方法
- 双击打开运行sh文件
- Qt之自定义提示框二(右下角冒泡)
- MapReduce计数器