Название: QT Creator и работа с реестром через Windows-библиотеки Отправлено: qwyllum от Декабрь 21, 2012, 08:59 Столкнулся с задачей написания программы, мониторящей ветку реестра на предмет изменений.
Написал простейшую консольную программу сперва без использования QT - все работает. Заменил в версии для QT printf на qDebug(). Компилируется без ошибок, но при попытке компиляции выдает ошибку, будто не может открыть реестр, хотя в консольной программе все работает. Выдает ошибку "Error in RegOpenKeyEx 998 " Может кто знает, в чем может быть дело? на всякий случай выкладываю код: Код: #include "dialog.h" Название: Re: QT Creator и работа с реестром через Windows-библиотеки Отправлено: Пантер от Декабрь 21, 2012, 10:19 http://bit.ly/RI4B9c
Название: Re: QT Creator и работа с реестром через Windows-библиотеки Отправлено: porup от Декабрь 21, 2012, 11:30 Или вот так:
Цитировать Runtime error 988 Failure of a dll to register The existence of a virus on your computer Incorrect regional settings The existence of an obsolete system file Broken or missing registry files Название: Re: QT Creator и работа с реестром через Windows-библиотеки Отправлено: Dancing_on_water от Декабрь 21, 2012, 12:11 В main есть вызов конструктора QCoreApplication или QApplication. Проверьте, что программа может добраться до всех необходимых библиотек.
Название: Re: QT Creator и работа с реестром через Windows-библиотеки Отправлено: qwyllum от Декабрь 21, 2012, 12:40 Или вот так: Цитировать Runtime error 988 Failure of a dll to register The existence of a virus on your computer Incorrect regional settings The existence of an obsolete system file Broken or missing registry files Спасибо, я умею пользоваться гуглом. Мне просто непонятно, какая ситуация может приводить к ошибке на QT и успешно работать в Visual Studio. Я засунул эти действия в обработчик кнопки и до обработки все успешно работает. Может есть похожая библиотека на QT, которая бы позволяла отслеживать изменения реестра? Название: Re: QT Creator и работа с реестром через Windows-библиотеки Отправлено: alex312 от Декабрь 21, 2012, 12:47 Спасибо, я умею пользоваться гуглом. Мне просто непонятно, какая ситуация может приводить к ошибке на QT и успешно работать в Visual Studio. Я засунул эти действия в обработчик кнопки и до обработки все успешно работает. Может есть похожая библиотека на QT, которая бы позволяла отслеживать изменения реестра? Компиляция с поддержкой юникода/без поддержки. А по делу - смотри исходники QSettings - он работает с реестром. Название: Re: QT Creator и работа с реестром через Windows-библиотеки Отправлено: qwyllum от Декабрь 21, 2012, 16:38 Спасибо, я умею пользоваться гуглом. Мне просто непонятно, какая ситуация может приводить к ошибке на QT и успешно работать в Visual Studio. Я засунул эти действия в обработчик кнопки и до обработки все успешно работает. Может есть похожая библиотека на QT, которая бы позволяла отслеживать изменения реестра? Компиляция с поддержкой юникода/без поддержки. А по делу - смотри исходники QSettings - он работает с реестром. А как компилировать с поддержкой юникода? В гугле ничего толкового не нашел. Пробовал просто устанавливать режим, вроде Код: QTextCodec codec = QTextCodec::codecForName("UTF-8"); По поводу QSetings - те примеры, которые я нашел позволяют только записать или считать текст. А мне нужно именно отслеживание обращений, даже просто при открытии ключа, без его сохранения. Название: Re: QT Creator и работа с реестром через Windows-библиотеки Отправлено: alex312 от Декабрь 21, 2012, 17:50 По поводу поддержки юникода - сомнительно, т.к., если я правильно понимаю, проблемы с юникодом возникают прежде всего при использовании языков, отличных от английского. У меня нет нигде символов кирилицы, разве может быть проблема с анлийским текстом? А как компилировать с поддержкой юникода? В гугле ничего толкового не нашел. Пробовал просто устанавливать режим, вроде Код: QTextCodec codec = QTextCodec::codecForName("UTF-8"); По поводу QSetings - те примеры, которые я нашел позволяют только записать или считать текст. А мне нужно именно отслеживание обращений, даже просто при открытии ключа, без его сохранения. А влияет он на то - какие функции будут вызываться и какие строки ожидать. Но может конечно проблема и не в этом. По поводу QSettings - я не предлагал тебе использовать этот класс, я предлагаю тебе порыться в его исходниках, и посмотреть как внутри него организована работа с реестром. Название: Re: QT Creator и работа с реестром через Windows-библиотеки Отправлено: Serr500 от Декабрь 21, 2012, 18:14 lErrorCode = RegOpenKeyEx(hMainKey, NULL, 0, KEY_NOTIFY, &hKey);
Название: Re: QT Creator и работа с реестром через Windows-библиотеки Отправлено: qwyllum от Декабрь 21, 2012, 18:43 lErrorCode = RegOpenKeyEx(hMainKey, NULL, 0, KEY_NOTIFY, &hKey); Спасибо огромное!!! Все заработало. Скажите, а если этот параметр будет ненулевым? Т.е. я захочу пойти по ветке дальше, в этом случае приемлем вариант типа (LPCWSTR)"path"?Название: Re: QT Creator и работа с реестром через Windows-библиотеки Отправлено: Serr500 от Декабрь 21, 2012, 21:35 Скажите, а если этот параметр будет ненулевым? Т.е. я захочу пойти по ветке дальше, в этом случае приемлем вариант типа (LPCWSTR)"path"? Этот вариант неприемлем. Дело в том, что строка имеет тип char* (байт на символ), а Вы её принудительно преобразуете в wchar_t* (два байта на символ). Ясно, что в результате получится не то, что надо. Я бы рекомендовал использовать одну из следующих форм записи, явно указывая на версию функции:Код: lErrorCode = RegOpenKeyExA(hMainKey, "SOFTWARE", 0, KEY_NOTIFY, &hKey); Код: lErrorCode = RegOpenKeyEx(hMainKey, L"SOFTWARE", 0, KEY_NOTIFY, &hKey); |