Форум: "Основная";
Текущий архив: 2002.08.12;
Скачать: [xml.tar.bz2];
ВнизТипизированный файл внутри *.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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c