我正在尝试为 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") ;
Run Code Online (Sandbox Code Playgroud)
RegDeleteKeyEx实际上不是一个函数 - 它是一个宏。根据您是否已UNICODE定义,宏将扩展为 MSDN 页面底部给出的实际函数名称:
RegDeleteKeyExW (Unicode) and RegDeleteKeyExA (ANSI)
Run Code Online (Sandbox Code Playgroud)
所以就你而言,你可能想要类似的东西
#ifdef UNICODE
const char RegDeleteKeyExSymbol[] = "RegDeleteKeyExW";
#else
const char RegDeleteKeyExSymbol[] = "RegDeleteKeyExA";
#endif
_RegDeleteKeyEx = (PFN_RegDeleteKeyEx)GetProcAddress( hAdvAPI32, RegDeleteKeyExSymbol );
Run Code Online (Sandbox Code Playgroud)
这将根据您自己的代码的编译方式(有或没有UNICODE定义)使用适当的符号名称。
| 归档时间: |
|
| 查看次数: |
1194 次 |
| 最近记录: |