У вас есть пара проблем с этим исходным кодом.
Во-первых, у вас есть функция с локальной переменной, переменной в стеке, которая возвращает адрес этой переменной, но когда функция возвращается, переменная исчезает, и адрес больше недействителен.
Следующая проблема заключается в том, что вы не сравниваете строки символов. Вместо этого вы сравниваете адрес, возвращаемый функцией, и, если вам повезет, адрес может быть таким же. Поскольку вы вызываете функцию дважды подряд, вам повезло, поэтому адрес один и тот же.
Я предлагаю вам сделать следующее: (1) создать две строки локальных символов в вашей функции, которая вызывает функцию GetRegistry()
, и (2) изменить функцию GetRegistry()
, чтобы она использовала эти буферы, а не свои собственные. Таким образом, код будет выглядеть примерно так:
char registryEntryOne[1024];
char registryEntryTwo[1024];
DWORD dwRegistryEntryOneLen;
DWORD dwRegistryEntryTwoLen;
registryEntryOne[0] = 0; // init the registry entry to zero length string
registryEntryTwo[0] = 0;
dwRegistryEntryOneLen = sizeof(registryEntryOne);
GetRegistry ("First", registryEntryOne, &dwRegistryEntryOneLen);
dwRegistryEntryTwoLen = sizeof(registryEntryTwo);
GetRegistry ("Second", registryEntryTwo, &dwRegistryEntryTwoLen);
// two strings are equal if:
// the lengths are the same
// at least one of the lengths is non-zero
// the bytes are the same in the same order
if (dwRegistryEntryOneLen && dwRegistryEntryOneLen == dwRegistryEntryTwoLen && memcmp (registryEntryOne, registryEntryTwo, dwRegistryEntryOneLen) == 0) {
// strings are equal
} else {
// strings are not equal
}
Функция GetRegistry() будет выглядеть примерно так:
char* GetRegistry(char* StringName, char *valueBuffer, DWORD *value_length)
{
DWORD dwType = REG_SZ;
HKEY hKey = 0;
const char* subkey = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\MCI\\Player";
RegOpenKey(HKEY_LOCAL_MACHINE,subkey,&hKey);
RegQueryValueEx(hKey, StringName, NULL, &dwType, (LPBYTE)valueBuffer, value_length);
return valueBuffer;
}
person
Richard Chambers
schedule
18.10.2012
SZ_STRING
, так зачем помещать это в заголовок. - person Roman R.   schedule 18.10.2012