Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
soundtrack
42 / 42 / 4
Регистрация: 15.12.2011
Сообщений: 131
#1

Работа с реестром - C++

08.10.2012, 23:29. Просмотров 641. Ответов 2
Метки нет (Все метки)

Доброго времени суток. Читаю в MSDN про работу с реестром и, собственно, начал с компиляции примера кода, по этому адресу.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// QueryKey - Enumerates the subkeys of key and its associated values.
//     hKey - Key whose subkeys and values are to be enumerated.
 
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
 
#define MAX_KEY_LENGTH 255
#define MAX_VALUE_NAME 16383
 
void QueryKey(HKEY hKey) 
{ 
    TCHAR    achKey[MAX_KEY_LENGTH];   // buffer for subkey name
    DWORD    cbName;                   // size of name string 
    TCHAR    achClass[MAX_PATH] = TEXT("");  // buffer for class name 
    DWORD    cchClassName = MAX_PATH;  // size of class string 
    DWORD    cSubKeys=0;               // number of subkeys 
    DWORD    cbMaxSubKey;              // longest subkey size 
    DWORD    cchMaxClass;              // longest class string 
    DWORD    cValues;              // number of values for key 
    DWORD    cchMaxValue;          // longest value name 
    DWORD    cbMaxValueData;       // longest value data 
    DWORD    cbSecurityDescriptor; // size of security descriptor 
    FILETIME ftLastWriteTime;      // last write time 
 
    DWORD i, retCode; 
 
    TCHAR  achValue[MAX_VALUE_NAME]; 
    DWORD cchValue = MAX_VALUE_NAME; 
 
    // Get the class name and the value count. 
    retCode = RegQueryInfoKey(
        hKey,                    // key handle 
        achClass,                // buffer for class name 
        &cchClassName,           // size of class string 
        NULL,                    // reserved 
        &cSubKeys,               // number of subkeys 
        &cbMaxSubKey,            // longest subkey size 
        &cchMaxClass,            // longest class string 
        &cValues,                // number of values for this key 
        &cchMaxValue,            // longest value name 
        &cbMaxValueData,         // longest value data 
        &cbSecurityDescriptor,   // security descriptor 
        &ftLastWriteTime);       // last write time 
 
    // Enumerate the subkeys, until RegEnumKeyEx fails.
    
    if (cSubKeys)
    {
        printf( "\nNumber of subkeys: %d\n", cSubKeys);
 
        for (i=0; i<cSubKeys; i++) 
        { 
            cbName = MAX_KEY_LENGTH;
            retCode = RegEnumKeyEx(hKey, i,
                     achKey, 
                     &cbName, 
                     NULL, 
                     NULL, 
                     NULL, 
                     &ftLastWriteTime); 
            if (retCode == ERROR_SUCCESS) 
            {
                _tprintf(TEXT("(%d) %s\n"), i+1, achKey);
            }
        }
    } 
 
    // Enumerate the key values. 
 
    if (cValues) 
    {
        printf( "\nNumber of values: %d\n", cValues);
 
        for (i=0, retCode=ERROR_SUCCESS; i<cValues; i++) 
        { 
            cchValue = MAX_VALUE_NAME; 
            achValue[0] = '\0'; 
            retCode = RegEnumValue(hKey, i, 
                achValue, 
                &cchValue, 
                NULL, 
                NULL,
                NULL,
                NULL);
 
            if (retCode == ERROR_SUCCESS ) 
            { 
                _tprintf(TEXT("(%d) %s\n"), i+1, achValue); 
            } 
        }
    }
}
 
void __cdecl _tmain(void)
{
   HKEY hTestKey;
 
   if( RegOpenKeyEx( HKEY_CURRENT_USER,
        TEXT("SOFTWARE\\Microsoft"),
        0,
        KEY_READ,
        &hTestKey) == ERROR_SUCCESS
      )
   {
      QueryKey(hTestKey);
   }
   
   RegCloseKey(hTestKey);
}


В пустом консольном проекте всё отлично работает. Теперь пытаюсь перенести всё это добро в windows forms: содержимое из функции main ставлю в обработчик кнопки, код функции QueryKey добавляю в класс формы. Вылезает ошибка:
Код
1>c:\users\soundtrack\documents\visual studio 2010\projects\1\1\Form1.h(131): error C2872: FILETIME: неоднозначный символ
1>          может быть "C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\windef.h(378) : _FILETIME FILETIME"
1>          или       "c:\program files\reference assemblies\microsoft\framework\.netframework\v4.0\mscorlib.dll : System::Runtime::InteropServices::FILETIME"
не очень разобрался с тем, что именно компилеру не нравится, и что он предлагает. Прошу помощи и разъяснения от опытных программистов
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2012, 23:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с реестром (C++):

Работа с реестром - C++
Вопрос в следующем как найти ключи в которых какое-то регулярное выражение?

Работа с реестром. - C++
Итак, есть прога, которая прописывается в реестр в HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Run. Но при...

Работа с реестром windows в с++ - C++
Доброго времени ув. форумчани. Возникла такая необходимость как заменять значения файлов реестра windows на свои константные значения через...

Работа с реестром, взрыв мозга - C++
Хех, доброго времени суток тебе, форумчанин. В муках уже второй день, никак не могу решить проблему обнаружения данных в реестре. Что я...

Работа с Реестром "От основ к вершинам" - C++
Доброго времени суток ;) Меня интересует полная работа с реестром или хотя бы чтение и запись. Если можно примеры с пояснениями, а...

по работе с реестром - C++
Приветствую форумчане. Занялся разработкой хоть какой то полезной программки и с разу столкнулся с проблемой, возможно ли методами С/С++...

2
I.M.
565 / 548 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
08.10.2012, 23:31 #2
Ну он же ясно пишет - неоднозначный символ.
Точнее, он не знает какой выбрать. Уточните этот момент для компилятора
0
soundtrack
42 / 42 / 4
Регистрация: 15.12.2011
Сообщений: 131
09.10.2012, 00:10  [ТС] #3
Цитата Сообщение от I.M. Посмотреть сообщение
Уточните этот момент для компилятора
Можно по-подробнее, как это сделать) И Где, к примеру, может использоваться повторное имя FILETIME в новосозданном проекте windows forms...по коду пробежался, вроде нигде такого нет...

Добавлено через 23 минуты
Использовал конкретное указание структуры FILETIME через пространство имён System::Runtime::InteropServices::FILETIME, как мне посоветовал сам компилятор, но теперь вылез целый ком ошибок на неразрешенные символы:
Код
1>1.obj : error LNK2028: ссылка на неразрешенную лексему (0A000011) "extern "C" long __stdcall RegEnumValueW(struct HKEY__ *,unsigned long,wchar_t *,unsigned long *,unsigned long *,unsigned long *,unsigned char *,unsigned long *)" (?RegEnumValueW@@$$J232YGJPAUHKEY__@@KPA_WPAK22PAE2@Z) в функции "private: void __clrcall My1::Form1::QueryKey(struct HKEY__ *)" (?QueryKey@Form1@My1@@$$FA$AAMXPAUHKEY__@@@Z)
1>1.obj : error LNK2028: ссылка на неразрешенную лексему (0A000012) "extern "C" long __stdcall RegEnumKeyExW(struct HKEY__ *,unsigned long,wchar_t *,unsigned long *,unsigned long *,wchar_t *,unsigned long *,struct _FILETIME *)" (?RegEnumKeyExW@@$$J232YGJPAUHKEY__@@KPA_WPAK212PAU_FILETIME@@@Z) в функции "private: void __clrcall My1::Form1::QueryKey(struct HKEY__ *)" (?QueryKey@Form1@My1@@$$FA$AAMXPAUHKEY__@@@Z)
1>1.obj : error LNK2028: ссылка на неразрешенную лексему (0A000013) "extern "C" long __stdcall RegQueryInfoKeyW(struct HKEY__ *,wchar_t *,unsigned long *,unsigned long *,unsigned long *,unsigned long *,unsigned long *,unsigned long *,unsigned long *,unsigned long *,unsigned long *,struct _FILETIME *)" (?RegQueryInfoKeyW@@$$J248YGJPAUHKEY__@@PA_WPAK22222222PAU_FILETIME@@@Z) в функции "private: void __clrcall My1::Form1::QueryKey(struct HKEY__ *)" (?QueryKey@Form1@My1@@$$FA$AAMXPAUHKEY__@@@Z)
1>1.obj : error LNK2028: ссылка на неразрешенную лексему (0A000014) "extern "C" long __stdcall RegCloseKey(struct HKEY__ *)" (?RegCloseKey@@$$J14YGJPAUHKEY__@@@Z) в функции "private: void __clrcall My1::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@Form1@My1@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
1>1.obj : error LNK2028: ссылка на неразрешенную лексему (0A000015) "extern "C" long __stdcall RegOpenKeyExW(struct HKEY__ *,wchar_t const *,unsigned long,unsigned long,struct HKEY__ * *)" (?RegOpenKeyExW@@$$J220YGJPAUHKEY__@@PB_WKKPAPAU1@@Z) в функции "private: void __clrcall My1::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@Form1@My1@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
1>1.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" long __stdcall RegEnumValueW(struct HKEY__ *,unsigned long,wchar_t *,unsigned long *,unsigned long *,unsigned long *,unsigned char *,unsigned long *)" (?RegEnumValueW@@$$J232YGJPAUHKEY__@@KPA_WPAK22PAE2@Z) в функции "private: void __clrcall My1::Form1::QueryKey(struct HKEY__ *)" (?QueryKey@Form1@My1@@$$FA$AAMXPAUHKEY__@@@Z)
1>1.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" long __stdcall RegEnumKeyExW(struct HKEY__ *,unsigned long,wchar_t *,unsigned long *,unsigned long *,wchar_t *,unsigned long *,struct _FILETIME *)" (?RegEnumKeyExW@@$$J232YGJPAUHKEY__@@KPA_WPAK212PAU_FILETIME@@@Z) в функции "private: void __clrcall My1::Form1::QueryKey(struct HKEY__ *)" (?QueryKey@Form1@My1@@$$FA$AAMXPAUHKEY__@@@Z)
1>1.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" long __stdcall RegQueryInfoKeyW(struct HKEY__ *,wchar_t *,unsigned long *,unsigned long *,unsigned long *,unsigned long *,unsigned long *,unsigned long *,unsigned long *,unsigned long *,unsigned long *,struct _FILETIME *)" (?RegQueryInfoKeyW@@$$J248YGJPAUHKEY__@@PA_WPAK22222222PAU_FILETIME@@@Z) в функции "private: void __clrcall My1::Form1::QueryKey(struct HKEY__ *)" (?QueryKey@Form1@My1@@$$FA$AAMXPAUHKEY__@@@Z)
1>1.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" long __stdcall RegCloseKey(struct HKEY__ *)" (?RegCloseKey@@$$J14YGJPAUHKEY__@@@Z) в функции "private: void __clrcall My1::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@Form1@My1@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
1>1.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" long __stdcall RegOpenKeyExW(struct HKEY__ *,wchar_t const *,unsigned long,unsigned long,struct HKEY__ * *)" (?RegOpenKeyExW@@$$J220YGJPAUHKEY__@@PB_WKKPAPAU1@@Z) в функции "private: void __clrcall My1::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@Form1@My1@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
1>C:\Users\soundtrack\documents\visual studio 2010\Projects\1\Debug\1.exe : fatal error LNK1120: 10 неразрешенных внешних элементов
Тут смущает такой момент, как void __clrcall - такое объявление было в функции main в консольном варианте. А сейчас я использую код в обработчике события нажатия на кнопку. Как быть?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2012, 00:10
Привет! Вот еще темы с ответами:

Ошибка в коде работы с реестром - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;conio.h&gt; #define BUFFSIZE 1000 using namespace std; ...

Как работать с системным реестром в Windows XP - C++
Скоко не слонялся по просторам нашего могучего интернета в поисках подробного описания функций RegCloseKey RegCreateKeyExA ...

Работа с реестром - MS Access
Здравствуйте! Подскажыть пожалуйста как записать и прочитать переменые в реестре с помощю бейсика.

Работа с реестром - C++ WinAPI
Доброго времени суток! Такой вопрос: Функция RegSetValue( rKey, 0, REG_SZ, currentDirectory, sizeof(currentDirectory) ); создает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru