Главная страница
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
1-35345
KPY
2002-07-30 12:34
2002.08.12
Подскажите как лучше сделать


1-35354
Sour
2002-07-30 14:22
2002.08.12
SWAP


1-35349
sanci
2002-07-30 11:22
2002.08.12
QickReport


3-35194
Студент заочник
2002-07-23 11:02
2002.08.12
две таблицы


1-35336
shubin
2002-07-30 11:16
2002.08.12
InfoPower