Почему является RegOpenKeyEx () возвратом кода ошибки 2 на Vista 64 бита?

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

29
задан Kevin Panko 29 July 2011 в 17:44
поделиться

3 ответа

Я обнаружил, что могу решить свою проблему, используя флаг: KEY_WOW64_64KEY, например:

result = RegOpenKeyEx(key, s, 0, KEY_READ|KEY_WOW64_64KEY, &key);

Для полного объяснения: 32-битные и 64-битные данные приложения в Реестр

57
ответ дан Kevin Panko 28 November 2019 в 00:55
поделиться

В Windows 64-разрядная система Реестр на самом деле разделен на две части. Один раздел используется 64-разрядными процессами и одной частью 32-разрядными процессами.

, Например, если 32-разрядное приложение программно пишет в то, чему оно верит, HKLM\SOFTWARE\Company\Application, оно на самом деле перенаправляется WoW64-слоем к HKLM\SOFTWARE\Wow6432Node\Company\Application.

Поэтому, когда Вы запускаете свое 32-разрядное приложение и называете RegOpenKeyEx, это на самом деле работает против папки Wow6432Node\, а не регулярного \SOFTWARE узла.

24
ответ дан Frode Lillerud 28 November 2019 в 00:55
поделиться

У меня была похожая проблема. Я использовал:

dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                                   (LPWSTR)"SOFTWARE\\0test",
                                   0,
                                   WRITE_DAC ,
                                   &hKey);

Это не сработало. Я попробовал так, и это сработало:

dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                                   _T("SOFTWARE\\0test"),
                                   0,
                                   WRITE_DAC ,
                                   &hKey);
0
ответ дан 28 November 2019 в 00:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: