Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Типизированный файл внутри *.exe [D1, Win95/98]


Gonzalez ©   (2002-07-20 09:06:00) 

Проблема такая: есть типизированный файл (file of record...), дальше я его делаю *.res"ом и гружу в паямять когда необходимо...
Вопрос: как мне с ним работать, когда он в памяти ... или же необходимо выгружать его на диск ?


DenKop   (2002-07-31 01:57:00) [1]

Ну, я же предупреждал (см. P.S. 24.07.02 19:33)!


Gonzalez   (2002-07-28 09:03:00) [2]

to DenKop:
Большое сенькью за ответ, я бы сам до такого не докопался...
Только: не WriteFile, a FileWrite... :)


Anatoly Podgoretsky   (2002-07-24 19:46:00) [3]

Gonzalez © (23.07.02 20:47)
Я не обратил внимание на Д1, поэтому не могу сказать так ли там в Вин 3.1, мой ответ касался Вин32
Если так же, то ни в какую переменную ничего копировать не нужно, это и так переменная.


DenKop   (2002-07-24 19:33:00) [4]

Примерно так:
var
h:THandle;
p:pointer;
FileHandle: THandle
begin
h:=FindResource(hInstance, "Имя_ресурса", "Тип_ресурса");
h:=LoadResource(hInstance, h);
p:=LockResource(h);
FileHandle:=FileCreate("Temp.tmp");
WriteFile(FileHandle,p,SizeOf(p));
FileClose(FileHandle);
UnLockResource(h);
FreeResource(h);
end;
Тип ресурса для нетипизированных файлов должен быть RCDATA.
Имя_ресурса - имя которое ты вписывал в rc файл при его компиляции.
После выполнения куска должен получить файл Temp.tmp в текущем каталоге.
P.S. Возможно код с ошибками, писал на "лету".


Gonzalez   (2002-07-24 16:58:00) [5]

to DenKop:
OK! Тогда, плиз, если возможно напиши как это сделать, а то я уже устал об этом думать :(


DenKop   (2002-07-23 23:01:00) [6]

Ну тогда скидывай всё в файл на винт и делай с ним всё, что нужно. Другого, более простого способа я не вижу, но это годится только если размеры файла не велики и нет особых требований к скорости его обработки.
P.S. А почему делается такой упор на D1?


Gonzalez   (2002-07-23 20:47:00) [7]

to SPeller:
Как я уже писал, у меня 1-й Delphi и ничего похожего на MS SDK нет

to Anatoly:
Я имею ввиду, как, зная первый байт файла данных в памяти, считать
оттуда, например, массив в конкретную переменную...

to DenKop:
Да я было сунулся со Stream"ами разбираться, а в D1 половина
(если не больше) методов и свойств не документирована :(


SPeller   (2002-07-23 06:55:00) [8]


> Gonzalez © (22.07.02 19:45)
> to SPeller:
> MS SDK чего-то не видно, наверно, не установил... :(

Пуск - Программы - Borland Delphi 6 - Help - MS SDK Help files - Win32 SDK Reference


DenKop   (2002-07-22 23:43:00) [9]

Самый оптимальный вариант выгрузить всё это дело в TMemoryStream, IMHO конечно! С TMemoryStream работа с файлом в памяти происходит также как если бы он находился на диске (TFileStream для файла на диске).


Anatoly Podgoretsky   (2002-07-22 20:00:00) [10]

Так это и есть в памяти, первый байт твоих данных


Gonzalez   (2002-07-22 19:45:00) [11]

to SPeller:
MS SDK чего-то не видно, наверно, не установил... :(

to Anatoly:
OK, но после того как мы нашли-таки начальный байт, как затем
можно эти данные (например, массивы целых чисел) вызвать из памяти?..


Anatoly Podgoretsky   (2002-07-21 12:26:00) [12]

LockResource возвращает указатель на первый байт


SPeller   (2002-07-21 08:38:00) [13]

Смотри MS SDK - CreateFileMapping


Gonzalez   (2002-07-21 08:08:00) [14]

А что это? К тому же я посмотрел - а у меня такой процедуры/функции(?) нет... Может она в более старших Дэльфях - у меня то 1-й ?..


SPeller   (2002-07-20 15:36:00) [15]

Выгрузи в FileMapping


Наверх

Титульная страница Поиск, карта сайта Написать письмо