zarrona
asked on
I keep getting the error "The procedure entry point RegDeleteKeyExW could not be located in the dynamic link library ADVAPI32.dll"
Hi
I have a program written in C++ using Visual Studio 2005.
At some point in my code I would like to call the function RegDeleteKey to delete a specific registry key.
My code is as simple as this:
LONG MyClass::deleteAKey(CStrin g path)
{
LONG lRet;
// open the key
if ( ERROR_SUCCESS != RegOpenKeyEx ( HKEY_LOCAL_MACHINE, path, 0, _sam, &_hKey))
{
//Could not open the registry key
return -1;
}
else
lRet = RegDeleteKeyEx(_hKey, path, KEY_WOW64_64KEY, 0);
return lRet;
}
All compiles and links fine. But when I try to run my program, I immediately get the error message, "The procedure entry point RegDeleteKeyExW could not be located in the dynamic link library ADVAPI32.dll". Now I wonder what could be wrong.
At the top of my .cpp file, I have also added the line:
#pragma comment(lib, "Advapi32.lib")
but nothing helps.
I'm guessing it has to do with name mangling but I'm not sure how to go about fixing this. I'm not sure...just a guess.
Can anyone help?
Thanks so much
I have a program written in C++ using Visual Studio 2005.
At some point in my code I would like to call the function RegDeleteKey to delete a specific registry key.
My code is as simple as this:
LONG MyClass::deleteAKey(CStrin
{
LONG lRet;
// open the key
if ( ERROR_SUCCESS != RegOpenKeyEx ( HKEY_LOCAL_MACHINE, path, 0, _sam, &_hKey))
{
//Could not open the registry key
return -1;
}
else
lRet = RegDeleteKeyEx(_hKey, path, KEY_WOW64_64KEY, 0);
return lRet;
}
All compiles and links fine. But when I try to run my program, I immediately get the error message, "The procedure entry point RegDeleteKeyExW could not be located in the dynamic link library ADVAPI32.dll". Now I wonder what could be wrong.
At the top of my .cpp file, I have also added the line:
#pragma comment(lib, "Advapi32.lib")
but nothing helps.
I'm guessing it has to do with name mangling but I'm not sure how to go about fixing this. I'm not sure...just a guess.
Can anyone help?
Thanks so much
ASKER
hi jkr,
Yes, Unicode is defined in my project and I understand that is why the "W" if found in "RegDeleteKeyExW()".
And I had already tried explicitly using the ANSI form RegDeleteKeyExA(hKey, "somepath" KEY_WOW64_64KEY, 0)...but that still made no difference. I even tried using KEY_WOW64_32KEY as the 3rd paramater. :-(...no hope.
I'm developing and running my program on a Windows XP Professioal x64 Edition too. So I'm guessing my machine is concidered a "client" right?...since I"m not trying to develope on a server.
I'm wondering do I have to load the library "Advapi32.lib" in a different way rather than just adding the line
#pragma comment(lib, "Advapi32.lib")
at the top of my cpp file. Or maybe make some changes to the Project Properties to add a dll or .lib or change something in the Linker section.
Another thought....I just noticed under the MSDN site the function RegDeleteKey(). Appears a bit different. I wonder what could be the big difference other than the parameters.
thanks
Yes, Unicode is defined in my project and I understand that is why the "W" if found in "RegDeleteKeyExW()".
And I had already tried explicitly using the ANSI form RegDeleteKeyExA(hKey, "somepath" KEY_WOW64_64KEY, 0)...but that still made no difference. I even tried using KEY_WOW64_32KEY as the 3rd paramater. :-(...no hope.
I'm developing and running my program on a Windows XP Professioal x64 Edition too. So I'm guessing my machine is concidered a "client" right?...since I"m not trying to develope on a server.
I'm wondering do I have to load the library "Advapi32.lib" in a different way rather than just adding the line
#pragma comment(lib, "Advapi32.lib")
at the top of my cpp file. Or maybe make some changes to the Project Properties to add a dll or .lib or change something in the Linker section.
Another thought....I just noticed under the MSDN site the function RegDeleteKey(). Appears a bit different. I wonder what could be the big difference other than the parameters.
thanks
ASKER
Problem solved....
I just used the RegDeleteKey() function and that gave me no problems while running my program.
I just used the RegDeleteKey() function and that gave me no problems while running my program.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Client
Requires Windows Vista or Windows XP Professional x64 Edition.
Server
Requires Windows Server "Longhorn" or Windows Server 2003 SP1.
see http://msdn.microsoft.com/library/en-us/sysinfo/base/regdeletekeyex.asp
BTW, have you tried
lRet = RegDeleteKeyExA(_hKey, path, KEY_WOW64_64KEY, 0);
to explicitly call the ANSI counterpart?