Im using Visual Studio 2003. Данная программа является приложением MFC.Недопустимая HANDLE была указана, когда RegCloseKey (HKEY)
Моя программа предназначена для открытия, чтения и закрытия ключей реестра. Я предполагаю, что открываю и читаю ключевой тон (потому что нет никаких инвалидов, ящиков сообщений или каких-либо других методов поиска ошибок, которые я реализовал).
Однако, когда я отлаживаю свою программу, я получаю «... Неверная HANDLE была указана ...» (включая адрес памяти). Я пробовал переходить через код с помощью отладчика, но я был так забав неспособен следовать за вещами.
Часть кода, где происходит ошибка:
HKEY hKey;
char *subKey = "\\HARDWARE\\DEVICEMAP\\Scsi\\Scsi Port ";
strcat(subKey, scsiPortNum);
LONG openResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, subKey, 0, KEY_ALL_ACCESS, &hKey);
if(openResult != ERROR_SUCCESS){
MessageBox(0, "There was an error closing the registry key", "Error", MB_OK);
}
//...do a few RegQueries...
LONG closeResult = RegCloseKey(hKey); //******Invalid HANDLE occurs here*******
if(closeResult != ERROR_SUCCESS){
MessageBox(0, "There was an error closing the registry key", "Error", MB_OK);
}
(scsiPortNum это символ [2], а только номер порта)
Как я уже сказал, я не становлюсь error/msg box with open, но я с закрытием ... Если кто-нибудь может указать, где я поступил неправильно, я был бы очень благодарен! :)
UPDATE: На основании ответа Лускана в поле ниже, я изменил мой код, и, таким образом, стал ближе к этому вопросу. Код structer теперь выглядит следующим образом:
HKEY hKey;
try{
char subKey[MAX_PATH];
strcpy(subKey, "\\HARDWARE\\DEVICEMAP\\Scsi\\Scsi Port ");
strcat(subKey, scsiPortNum);
auto openResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, subKey, 0, KEY_ALL_ACCESS, &hKey);
if(openResult == ERROR_SUCCESS){
//do query...
//close key
auto closeResult = RegCloseKey(hKey);
if(closeResult != ERROR_SUCCESS){
MessageBox(0, "Error closing the key", "Registry Error", MB_OK);
}
}else{
MessageBox(0, "Error opening the key", "Registry Error", MB_OK);
}
}catch(...){
MessageBox(0, "You caught an exception!", "Try/Catch", MB_OK);
}
И я получаю сообщение об открытии ключа теперь ... возможно, я недопониманием аргументов, которые принимают RegOpenKeyEx? или я что-то не инициализирую что-то правильно?
на боковой ноте, если кто-то может сказать мне, как отступом вышеприведенный код, я был бы очень благодарен - это заводит меня с ума! лол – redhotspike