Delphi: Ошибка при записи в реестр функцией RegSetValueExW Я юзаю Delphi 2007 и TMS Unicode Components Pack 1.7.0.2 (бывшие TNT Unicode Controls). Подключаю в uses юнит TntRegistry. В коде: Code: 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. Её код (лишнее удалено): Code: procedure TTntRegistry.WriteString(const Name, Value: WideString); begin PutData(Name, PWideChar(Value), (Length(Value)+1) * SizeOf(WideChar), rdString); end; Смотрю PutData, куда и отсылает компилятор (лишнее удалено): Code: 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 не пишет в реестр. В результате этого и возникает ошибка.
GetLastError еще никто не отменял между прочим, да и eregistryexception должен чего нить выдавать если есть причина. upd: sysutils.SysErrorMessage(GetLastError); // вернет string
Ладно, посмотрю, что не так. Ошибка - "Failed to set data for ''." То есть не может записать в значение ''. Подставлял 'test', выдает "Failed to set data for 'test'." В Delphi IDE после ошибки при нажатии в сообщении кнопки 'Break' открывается юнит TntRegistry и показывает функцию TTntRegistry.PutData. Видимо RegSetValueExW некорректно работает. Также у меня возникала ошибка с функцией SHFileOperationW из ShellAPI. SHFileOperation и SHFileOperationA работают, а она нет.