GetProcAddress函数检索指定的动态链接库(DLL)中的输出库函数地址。

  函数原型:

  FARPROC GetProcAddress(

  HMODULE hModule, // DLL模块句柄

  LPCSTR lpProcName // 函数名

  );

 参数:

 hModule

  [in] 包含此函数的DLL模块的句柄。LoadLibrary、AfxLoadLibrary 或者GetModuleHandle函数可以返回此句柄。

  lpProcName

  [in] 包含函数名的以NULL结尾的字符串,或者指定函数的序数值。如果此参数是一个序数值,它必须在一个字的底字节,高字节必须为0。

  返回值:

  如果函数调用成功,返回值是DLL中的输出函数地址。

  如果函数调用失败,返回值是NULL。得到进一步的错误信息,调用函数GetLastError。

FARPROC 是一个4字节指针,指向一个函数的内存地址,例如
GetProcAddress 的返回类型就是一个FARPROC。
如果你要存放这个地址,可以声明以一个 FARPROC变量来存放。

GetProcAddress返回的是一个函数地址的指针。
声明:FARPROC WINAPI GetProcAddress(__in HMODULE hModule, __in LPCSTR LpProcName);
你应该知道你要的函数的类型是什么,可以用typedef的方法定义函数类型,然后定义一个这种类型的变量,你得到地址后,将地址的类型转换并存到那个变量中就行了。例如:

这是RunHook定义:
BOOL _stdcall RunHook(HMODULE hModule,DWORD dwThreadId)
{
HWndHook=::SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)HOOKProc,hMod,dwThreadId);
return TRUE;
}

这是全局声明:
typedef BOOL (_stdcall *funRunHook)(HMODULE hModule,DWORD dwThreadID);

这两种调用都不行:
funRunHook RunHook;
RunHook=(funRunHook)GetProcAddress(hMod,"RunHook");

**************************************************************************************************************************

LoadLibrary加载动态库失败的解决办法

方式一 采用LoadLibraryEx

转载:http://blog.sina.com.cn/s/blog_62ad1b8101017qub.html

若DLL不在调用方的同一目录下,可以用LoadLibrary(L"DLL绝对路径")加载。但若调用的DLL内部又调用另外一个DLL,此时调用仍会失败。解决办法是用LoadLibraryEx:
LoadLibraryEx("DLL绝对路径", NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
通过指定LOAD_WITH_ALTERED_SEARCH_PATH,让系统DLL搜索顺序从DLL所在目录开始。

方式二 采用SetCurrentDir

转载:http://blog.csdn.net/flyayi2006/article/details/5526982

跨目录调用dll,你应该这样
1 用GetCurrentDir保存当前的工作目录
2 用SetCurrentDir将当前的工作目录,设置为你的DLL所在的路径,需要使用绝对路径
3 用LoadLibrary你的DLL
4 使用SetCurrentDir恢复到原来的工作路径

实例:

TCHAR chCurDir[MAX_PATH] = {0};
    GetCurrentDirectory(MAX_PATH, chCurDir);
    SetCurrentDirectory(_T("E:\\test\\"));
    m_hDLL = LoadLibrary(_T("MyTest.dll"));
    SetCurrentDirectory(chCurDir);

GetProcAddress() LoadLibrary() DLL相关推荐

  1. matlab2011没有netframe,loadlibrary失败?matlab loadlibrary?dll文件找不到入口点?用LoadLibrary加载D...

    你是否正在寻找关于loadlibrary失败的内容?让我把最完整的东西奉献给你: 当前位置:我的异常网» VC»用LoadLibrary加载DLL失败,为何呢 用LoadLibrary加载DLL失败, ...

  2. Visual C++ dll

    这篇文章来自     http://msdn.microsoft.com/zh-cn/library/1ez7dh12(VS.80).aspx 具体的资料可以参考msdn Visual C++ DLL ...

  3. 【原创】完美实现GetProcAddress [文字模式]

    2019独角兽企业重金招聘Python工程师标准>>> 我们知道kernel32.dll里有一个GetProcAddress函数,可以找到模块中的函数地址,函数原型是这样的: WIN ...

  4. dll窗体的创建与调用

    建立DLL项目: library ShowDllForm; .... Uses ... Exports //输出引用 ShowDllModalForm, //显示模态窗体 ShowDllForm; / ...

  5. 【C/C++】lib 和 dll 的区别、生成以及使用详解

    VS开发多功能模块的项目时,负责不同模块的人员因为权限问题,不能拿到所有源码,但又需要进行功能模块的融合,这就需要使用dll.lib进行"代码共享".在学习dll和lib时,找到了 ...

  6. BCB 编写 DLL 终极手册

    BCB 编写 DLL 终极手册 一. 编写 DLL File/New/Dll 生成 Dll 的向导,然后可以添加导出函数和导出类 导出函数:extern "C" __declspe ...

  7. Delphi DLL制作和加载 Static, Dynamic, Delayed 以及 Shared-Memory Manager

    一 Dll的制作一般分为以下几步: 1 在一个DLL工程里写一个过程或函数 2 写一个Exports关键字,在其下写过程的名称.不用写参数和调用后缀. 二 参数传递 1 参数类型最好与window C ...

  8. lib和dll的区别、生成以及使用详解

    [目录] lib dll介绍 生成动态库 调用动态库 生成静态库 调用静态库 首先介绍一下静态库(静态链接库).动态库(动态链接库)的概念,首先两者都是代码共享的方式. 静态库:在连接步骤中,连接器将 ...

  9. 如何正确创建DLL和使用DLL

    如何正确创建DLL和使用DLL 本文将通过一个简单的实例来说明,如何正确的导出DLL中的类.对象.函数,并如何通过静态加载或动态加载的方式来使用DLL. 一.DLL中导出类.函数.对象 1. 创建一个 ...

最新文章

  1. Linux centos6.5 64下oracle10g_静默安装完整版
  2. hdu-6166(最短路+二进制分组)
  3. android http pos 请求和gson解析处理head头信息
  4. 网络相关知识点:nginx相关概念
  5. 使用Ajax解析数据遇到的问题
  6. ajax设置自定义请求头信息
  7. iframe多层嵌套时获取元素总结
  8. 【ElasticSearch】Es 源码之 Transport 和 TransportService 源码解读
  9. python nums函数获取结果记录集有多少行记录_Python数据分析——Pandas数据结构和操作...
  10. raster | R语言中的空间栅格对象及其基本处理方法(Ⅱ):投影、属性提取
  11. 前端-chromeF12 谷歌开发者工具详解 Network篇
  12. JBoss 目录结构解释
  13. 我对Backbone的认识
  14. 模拟集成电路大牛的经验
  15. R语言 rgl plot3d函数
  16. 汇编语言第一课作业1.1
  17. delphi 注册表
  18. 当div的宽度为百分比时,如何设置成为一个正方形?
  19. lwip连续发数据卡死_用lwip发送大量数据时,遇到的问题解答记录;
  20. 计算机18个专业方向

热门文章

  1. spring-data-jpa 使用
  2. 面试题:Fibonacci数列
  3. 前端开发一些很有用的工具
  4. 判断 iframe 是否加载完成的完美方法(转)
  5. 自定义EL函数解决JSTL标签不足之处——按字节长度截取字符串
  6. 1106: 回文数(函数专题)
  7. MySQL索引底层实现原理
  8. windows 下安装rabbitmq
  9. Struts2_2_第一Struts2应用
  10. Linux的proc文件系统详解