Windows RegDeleteKey和RegDeleteKeyEx
我正在编写一个应用程序,它将使用APIRegDeleteKey或RegDeleteKeyEx递归删除一些注册表项。困扰我的是RegDeleteKeyEx没有为小于XP x64 Professional的用户定义,所以现在这个限制限制限制了我的应用程序。是否有任何方法可以使用两种API,使其兼容XP x86和Win7 x64 为了让您的应用程序在不存在Windows RegDeleteKey和RegDeleteKeyEx,windows,winapi,registry,Windows,Winapi,Registry,我正在编写一个应用程序,它将使用APIRegDeleteKey或RegDeleteKeyEx递归删除一些注册表项。困扰我的是RegDeleteKeyEx没有为小于XP x64 Professional的用户定义,所以现在这个限制限制限制了我的应用程序。是否有任何方法可以使用两种API,使其兼容XP x86和Win7 x64 为了让您的应用程序在不存在RegDeleteKeyEx的旧系统中运行,您需要避免静态链接到此API。也就是说,您不直接使用这个函数,而是通过GetProcAddress在运行
RegDeleteKeyEx
的旧系统中运行,您需要避免静态链接到此API。也就是说,您不直接使用这个函数,而是通过GetProcAddress
在运行时获取它的指针。如果成功,那么API可用,您可以使用它(或者您可以检查操作系统版本)
看看这里::
RegDeleteKey
可以直接使用,因为它存在于所有目标平台中。为了让您的应用程序在不存在RegDeleteKeyEx
的旧系统中运行,您需要避免静态链接到此API。也就是说,您不直接使用这个函数,而是通过GetProcAddress
在运行时获取它的指针。如果成功,那么API可用,您可以使用它(或者您可以检查操作系统版本)
看看这里::
RegDeleteKey
可以直接使用,因为它存在于所有目标平台中。谢谢你,mate,你给我省了很多麻烦:-)@RomanR:“或者你可以检查操作系统版本”-只有在编译时延迟加载函数(在运行时使用动态加载)时才有效@Remy Lebeau:在进入LoadModule/GetProcAddress之前,可能需要检查版本。如果需要同时定位多个函数,或者当函数存在但不执行预期的操作(仅存根)时,这是有意义的。你所说的当然也有效(延迟加载DLL和版本检查以避免调用实际丢失的函数)。谢谢你,伙计,你为我省了很多麻烦:-)@RomanR:“或者你可以检查操作系统版本”-只有在编译时延迟加载函数(在运行时使用动态加载)才有效@Remy Lebeau:在进入LoadModule/GetProcAddress之前,可能需要检查版本。如果需要同时定位多个函数,或者当函数存在但不执行预期的操作(仅存根)时,这是有意义的。当然,您所说的也有效(延迟加载DLL和版本检查以不调用实际缺少的函数)。
hAdvAPI32 = LoadLibrary(_T("AdvAPI32.dll"));
ASSERT(hAdvAPI32 != NULL);
_RegDeleteKeyEx = (PFN_RegDeleteKeyEx)GetProcAddress(hAdvAPI32 , "RegDeleteKeyEx");
ASSERT(_RegDeleteKeyEx != NULL);