lm68140318 发表于 2023-5-8 15:06:28

GetProcAddress

        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??

isdkz 发表于 2023-5-8 15:06:48

可能是因为函数名的类型不正确,应该使用 char 类型而不是 TCHAR 类型。请尝试将 ch 数组声明为 char 类型,如下所示:

char ch[] = "GetCurrentThreadId";


另外,您还可以尝试使用 ANSI 版本的 GetProcAddress 函数,即 GetProcAddressA,如下所示:

p f = (p)GetProcAddressA(hmodule, "GetCurrentThreadId");


如果这些解决方案都无法解决问题,请确保您的程序可以访问 kernel32.dll 并且该函数确实存在于该库中。
页: [1]
查看完整版本: GetProcAddress