|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Dll как хранилище настроек
Всем привет, проблема не могу разобраться как хранить в ДЛЛ настроики программы.
Например пути к фаилам, настроики фильтров и размеры окон кто с талкивался с такой проблемой подскажите как это делается .... |
#2
|
||||
|
||||
Как то не слышал, чтобы в dll хранили настройки. Реестра или файла не хватает?
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#3
|
||||
|
||||
Цитата:
Хм впринципе можно и инишник сделать, но это как-то неинтересно хочется что-то новое... |
#4
|
||||
|
||||
Честным способом ОС не даст писать в dll или другой файл. Но если не хочется писать в ini в текстовом виде, пиши в бинарном, можешь ещё и закодировать при этом.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#5
|
||||
|
||||
Если сильно хочется, но нельзя - значит можно
Код:
function AttachToFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean; var aStream: TFileStream; iSize: Integer; begin Result := False; if not FileExists(AFileName) then Exit; try aStream := TFileStream.Create(AFileName, fmOpenWrite or fmShareDenyWrite); MemoryStream.Seek(0, soFromBeginning); aStream.Seek(0, soFromEnd); aStream.CopyFrom(MemoryStream, 0); iSize := MemoryStream.Size + SizeOf(Integer); aStream.Write(iSize, SizeOf(iSize)); finally aStream.Free; end; Result := True; end; function LoadFromFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean; var aStream: TFileStream; iSize: Integer; begin Result := False; if not FileExists(AFileName) then Exit; try aStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite); aStream.Seek(-SizeOf(Integer), soFromEnd); aStream.Read(iSize, SizeOf(iSize)); if iSize > aStream.Size then begin aStream.Free; Exit; end; aStream.Seek(-iSize, soFromEnd); MemoryStream.SetSize(iSize - SizeOf(Integer)); MemoryStream.CopyFrom(aStream, iSize - SizeOf(iSize)); MemoryStream.Seek(0, soFromBeginning); finally aStream.Free; end; Result := True; end; Вот если надо "мини-демка": Код:
// Запись var aStream: TMemoryStream; begin aStream := TMemoryStream.Create; Memo1.Lines.SaveToStream(aStream); if not FileExists('options.exe') then showmessage('error!!!'); AttachToFile('options.exe', aStream); aStream.Free; end; // Чтение var aStream: TMemoryStream; begin aStream := TMemoryStream.Create; if not FileExists('options.exe') then showmessage('error!!!'); LoadFromFile('options.exe', aStream); Memo1.Lines.LoadFromStream(aStream); aStream.Free; end; Помогаю за Спасибо Последний раз редактировалось v1s2222, 18.01.2012 в 17:33. |
#6
|
|||
|
|||
хороший способ
сама же в себя программа не может писать вроде можно сделать самоудаляющиейся bat/vbs скрипт, который бы это записывал, тогда вобще всё можно держать в одном exe |
#7
|
||||
|
||||
Ну а если брать отдельную dll, как надо ТС, то все спокойно записывается.
Да и в сам ЕХЕ записать можно, только через др. программу, либо скрипт. Помогаю за Спасибо |
#8
|
||||
|
||||
Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#9
|
||||
|
||||
Цитата:
А код выложил для ознакомления. Хотели писать в библиотеки - пожалуйста Помогаю за Спасибо |
#10
|
||||
|
||||
Код:
uses IniFiles, var ini: TIniFile; begin ini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'Project1.dll'); ini.WriteString('Section', 'Ident', 'Value'); ini.Free; end; Пишу программы за еду. __________________ Последний раз редактировалось NumLock, 19.01.2012 в 11:33. |