Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.12;
Скачать: CL | DM;

Вниз

Типизированный файл внутри *.exe   Найти похожие ветки 

 
Gonzalez ©   (2002-07-20 09:06) [0]

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


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

Выгрузи в FileMapping


 
Gonzalez ©   (2002-07-21 08:08) [2]

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


 
SPeller ©   (2002-07-21 08:38) [3]

Смотри MS SDK - CreateFileMapping


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

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


 
Gonzalez ©   (2002-07-22 19:45) [5]

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

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


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

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


 
DenKop ©   (2002-07-22 23:43) [7]

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


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


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

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


 
Gonzalez ©   (2002-07-23 20:47) [9]

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

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

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


 
DenKop ©   (2002-07-23 23:01) [10]

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


 
Gonzalez ©   (2002-07-24 16:58) [11]

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


 
DenKop ©   (2002-07-24 19:33) [12]

Примерно так:
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. Возможно код с ошибками, писал на "лету".


 
Anatoly Podgoretsky ©   (2002-07-24 19:46) [13]

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


 
Gonzalez ©   (2002-07-28 09:03) [14]

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


 
DenKop ©   (2002-07-31 01:57) [15]

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



Страницы: 1 вся ветка

Текущий архив: 2002.08.12;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.015 c
4-35511
Prooksius
2002-06-06 10:41
2002.08.12
RichEdit 1.0 vs RichEdit 2.0


14-35464
Bboy
2002-07-18 22:37
2002.08.12
Проблемы при просмотре фильма???!?!?!?


3-35161
Alex Shulg
2002-07-22 13:34
2002.08.12
Не работает AutoInc поля


4-35516
SStas
2002-06-07 09:03
2002.08.12
Резидент


3-35226
Crazy Joker
2002-07-19 11:29
2002.08.12
Помогите! Форма не отображается пока не выполнится запрос к БД .