鱼C论坛

 找回密码
 立即注册
查看: 528|回复: 1

[已解决]GetProcAddress

[复制链接]
发表于 2023-5-8 15:06:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
        HMODULE hmodule=::GetModuleHandle(_T("kernel32.dll"));//获取动态链接库的模块句柄
        
        typedef DWORD(*p)(void);//声明函数指针数据类型
        TCHAR ch[] = _T("GetCurrentThreadId");
                
        p f=(p)::GetProcAddress(hmodule,(LPCSTR)ch);// 获取动态链接库中函数的地址
        /*
        参数1:HMODULE  动态链接库的模块句柄
        参数2:LPCSTR   函数名
        返回值:如果函数调用成功,返回值是DLL中的输出函数地址。
                        如果函数调用失败,返回值是NULL
        */

        

我的问题:  返回的f  是NULL  ??
最佳答案
2023-5-8 15:06:48
可能是因为函数名的类型不正确,应该使用 char 类型而不是 TCHAR 类型。请尝试将 ch 数组声明为 char 类型,如下所示:
char ch[] = "GetCurrentThreadId";

另外,您还可以尝试使用 ANSI 版本的 GetProcAddress 函数,即 GetProcAddressA,如下所示:
p f = (p)GetProcAddressA(hmodule, "GetCurrentThreadId");

如果这些解决方案都无法解决问题,请确保您的程序可以访问 kernel32.dll 并且该函数确实存在于该库中。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-8 15:06:48 | 显示全部楼层    本楼为最佳答案   
可能是因为函数名的类型不正确,应该使用 char 类型而不是 TCHAR 类型。请尝试将 ch 数组声明为 char 类型,如下所示:
char ch[] = "GetCurrentThreadId";

另外,您还可以尝试使用 ANSI 版本的 GetProcAddress 函数,即 GetProcAddressA,如下所示:
p f = (p)GetProcAddressA(hmodule, "GetCurrentThreadId");

如果这些解决方案都无法解决问题,请确保您的程序可以访问 kernel32.dll 并且该函数确实存在于该库中。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 09:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表