gpt4 book ai didi

windows - GetProcAddress 为 RegDeleteKeyEx 返回 NULL

转载 作者:可可西里 更新时间:2023-11-01 09:55:54 24 4
gpt4 key购买 nike

我正在尝试为 32 位和 64 位操作系统实现注册表项的递归删除。由于 RegDeleteKeyEx 未针对低于 XP x64 Professional 的操作系统定义,因此我尝试间接使用该函数。

问题::即使在 x64 上,GetProcAddress() 也会返回 NULL。

//Global Declarations 
typedef LONG (WINAPI * PFN_RegDeleteKeyEx)(HKEY hKey , LPCTSTR lpSubKey , REGSAM samDesired , DWORD Reserved );
PFN_RegDeleteKeyEx _RegDeleteKeyEx ;

//The code inside function
hAdvAPI32 = LoadLibrary(TEXT("Advapi32.dll"));
_RegDeleteKeyEx = (PFN_RegDeleteKeyEx)GetProcAddress( hAdvAPI32, "RegDeleteKeyEx" );
if( _RegDeleteKeyEx == NULL )
printf("NULL\n") ;

最佳答案

RegDeleteKeyEx实际上不是一个函数——它是一个宏。根据您是否定义了 UNICODE,宏将扩展为 MSDN 页面底部给出的实际函数名称:

RegDeleteKeyExW (Unicode) and RegDeleteKeyExA (ANSI)

所以在你的情况下,你可能想要类似的东西

#ifdef UNICODE
const char RegDeleteKeyExSymbol[] = "RegDeleteKeyExW";
#else
const char RegDeleteKeyExSymbol[] = "RegDeleteKeyExA";
#endif

_RegDeleteKeyEx = (PFN_RegDeleteKeyEx)GetProcAddress( hAdvAPI32, RegDeleteKeyExSymbol );

这将根据您自己的代码的编译方式(定义或不定义 UNICODE)使用适当的符号名称。

关于windows - GetProcAddress 为 RegDeleteKeyEx 返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12813679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com