Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Delphi: Ошибка при записи в реестр функцией RegSetValueExW |

22.12.2008, 18:27
|
|
Новичок
Регистрация: 10.09.2007
Сообщений: 17
Провел на форуме: 19240
Репутация:
5
|
|
Delphi: Ошибка при записи в реестр функцией RegSetValueExW
Я юзаю Delphi 2007 и TMS Unicode Components Pack 1.7.0.2 (бывшие TNT Unicode Controls).
Подключаю в uses юнит TntRegistry.
В коде:
Код:
if myreg.OpenKey('*\shell\MyApp\command',True)
then begin
myreg.WriteString('','"'+TntApplication.ExeName+'" "%1"');
myreg.CloseKey;
end;
Возникает ошибка. Если закомментировать myreg.WriteString, то ошибки нет. Ошибка кроется именно в WriteString (пока не проверял WriteInteger, WriteBool и другие). Ошибка - "Failed to set data for ''."
Изучаю функцию WriteString. Её код (лишнее удалено):
Код:
procedure TTntRegistry.WriteString(const Name, Value: WideString);
begin
PutData(Name, PWideChar(Value), (Length(Value)+1) * SizeOf(WideChar), rdString);
end;
Смотрю PutData, куда и отсылает компилятор (лишнее удалено):
Код:
procedure TTntRegistry.PutData(const Name: WideString; Buffer: Pointer;
BufSize: Integer; RegData: TRegDataType);
var
DataType: Integer;
begin
DataType := RegDataToDataType(RegData);
if RegSetValueExW(CurrentKey, PWideChar(Name), 0, DataType, Buffer,
BufSize) <> ERROR_SUCCESS then
raise ERegistryException.CreateResFmt(@SRegSetDataFailed, [Name]);
end;
Вот не пойму, почему RegSetValueExW не пишет в реестр. В результате этого и возникает ошибка.
Последний раз редактировалось Ta2i4; 22.12.2008 в 18:37..
|
|
|

22.12.2008, 20:06
|
|
Постоянный
Регистрация: 19.10.2007
Сообщений: 794
Провел на форуме: 1013791
Репутация:
711
|
|
GetLastError еще никто не отменял между прочим, да и eregistryexception должен чего нить выдавать если есть причина.
upd:
sysutils.SysErrorMessage(GetLastError); // вернет string
Последний раз редактировалось neprovad; 22.12.2008 в 20:08..
Причина: на всякий случай
|
|
|

23.12.2008, 05:39
|
|
Новичок
Регистрация: 10.09.2007
Сообщений: 17
Провел на форуме: 19240
Репутация:
5
|
|
Ладно, посмотрю, что не так.
Ошибка - "Failed to set data for ''." То есть не может записать в значение ''. Подставлял 'test', выдает "Failed to set data for 'test'."
В Delphi IDE после ошибки при нажатии в сообщении кнопки 'Break' открывается юнит TntRegistry и показывает функцию TTntRegistry.PutData. Видимо RegSetValueExW некорректно работает.
Также у меня возникала ошибка с функцией SHFileOperationW из ShellAPI. SHFileOperation и SHFileOperationA работают, а она нет.
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|