VS2010如何链接lib文件

         //全局变量
        HMODULE g_hmodule=NULL;


        g_hmodule=LoadLibrary(L"Hellpd.dll");  ① 把"Hellpd.dll"地址赋值给g_hmodule变量
FARPROC proc=GetProcAddress(g_hmodule,"StarHook"); ②把"Hellpd.dll"中的"StarHook"函数地址赋值给proc


proc();   //调用proc就等于调用dll中的StarHook函数
MessageBox(L"游戏辅助启动成功");




①加载一个dll或者exe并返回当前地址,如果没有填完整路径系统会使用一个标准的搜索策略找到模块,如果函数无法找到该模块,功能失败。因为是宽字符所以前面要加个"L"。


②从指定的动态链接库(DLL)检索一个导出的函数或变量的地址,参数1:模块句柄(模块起始地址);参数2:要调用的DLL内的函数名。




FARPROC类型


FARPROC 实际就是一个4字节指针,指向一个内存地址。
这个地址一般是指向函数的比如说

GetProcAddress 的返回类型就是一个 FARPROC 他实际是一个函数的地址。


VS2010如何链接lib文件

1.首先选择“项目”→“链接器”→“常规”→“附加库目录”

把lib文件所在的目录选进来,然后在“链接库依赖项”中填入lib文件全名比如"DLL1.lib"。

2.“链接器”→“输入”→“附加依赖项”

再次输入lib文件全名,例如"DLL1.lib"。确定后就能正常通过编译了。




显式加载方式加载DLL


LoadLibrary函数




之前的例子都是通过隐式链接的方式来实现对动态链接库的访问,下面将采用动态加载方式来访问动态链接库。使用动态加载的方式加载链接库时,需要用到LoadLibrary函数。该函数的作用是将指定的可执行模块映射到调用进程的地址空间。函数原型如下:


HMODULE LoadLibrary(LPCTSTR lpFileName);


LoadLibrary函数不仅能够加载DLL(.dll),还可以加载可执行模块(.exe)。一般来说,当加载可执行模块时,主要是为了访问该模块内的一些资源,例如对话框资源、位图资源或图标资源等。该函数有一个字符串类型(LPCTSTR)的参数,该参数指定了可执行模块的名称,既可以是一个.dll文件,也可以是一个.exe文件。如果调用成功,LoadLibrary函数将返回所加载的那个模块的句柄。该函数的返回类型是HMODULE。HMODULE类型和HINSTANCE类型可以通用。


当获取到动态链接库模块句柄后,接下来就要想办法获取该动态链接库中导出函数的地址,这可以通过调用GetProcAddress函数来实现。该函数用来获取DLL导出函数的地址。




函数原型:


FARPROC GetProcAddress(


HMODULE hModule, // DLL模块句柄,就是LoadLibrary函数的返回值


LPCSTR lpProcName // 函数名或函数的序号


//这里应当注意,如果该参数指定的是导出函数的序号,那么该序号必须在低位字中,高位必须是0。




);




P733 



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值