![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Здравствуйте!
Интересует такой вопрос: Есть ли возможность записывать массив (любой размерности без перебора!!) в файл, как проекции памяти. Т.е. в том виде, как он хранится памяти, так его и писать побайтово (да, от перебора не отказаться совсем конечно)... Как это осуществить и что читать? Пытался осилить мелкософтовский мануал по WinAPI, только опух от этого, не хватает практических примеров. Спасибо. |
|
#2
|
||||
|
||||
|
Nihil novi sub Luna.
См. CreateFileMapping, на сайте "Королевство Дельфи" есть хорошие примеры. Писать в такой файл можно простым CopyMemory (как её использовать - см. F1). Ах да, еще есть TFileStream, сводящий работу с файлом к функциям Read и Write. Последний раз редактировалось M.A.D.M.A.N., 23.04.2013 в 09:16. |
|
#3
|
|||
|
|||
|
Цитата:
![]() Ой, забыл совсем добавить, что хорошо бы силами паскаля это делать, полскольку, мне хотелось бы кросс-платформенности. Под линупсом че вызывать фиг знает. Но за винапи функцию очень спасибо, поизучаю ![]() Последний раз редактировалось damekkoneko, 23.04.2013 в 09:22. |
|
#4
|
||||
|
||||
|
Я дописал сообщение, посмотри.
|
|
#5
|
||||
|
||||
|
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
arr: array [0..1, 0..3] of Word;
x, y: Byte;
hFile: THandle;
Dummy: DWORD;
begin
Memo1.Clear;
for x:=0 to 1 do
for y:=0 to 3 do
begin
arr[x, y]:=x shl 8 or y;
Memo1.Lines.Add(Format('%.4x', [arr[x, y]]));
end;
hFile:=CreateFile('Project1.txt', GENERIC_WRITE, 0, nil, CREATE_ALWAYS, 0, 0);
WriteFile(hFile, PByte(@arr[0, 0])^, SizeOf(arr), Dummy, nil);
CloseHandle(hFile);
end;
end. |
|
#6
|
|||
|
|||
|
Цитата:
Вот, вот этого мне и не хватало: Код:
PByte(@arr[0, 0])^ Осталось разобраться, как преобразовать строковой массив. Спасибо) Последний раз редактировалось damekkoneko, 23.04.2013 в 15:37. |
|
#7
|
||||
|
||||
|
смотря какие строки: short или long. с первыми проблем нет:
Код:
var
arr: array [0..1, 0..3] of String[7];
x, y: Byte;
hFile: THandle;
Dummy: DWORD;
begin
Memo1.Clear;
for x:=0 to 1 do
for y:=0 to 3 do
arr[x, y]:=IntToHex(x shl 8 or y, 7);
hFile:=CreateFile('Project1.txt', GENERIC_WRITE, 0, nil, CREATE_ALWAYS, 0, 0);
WriteFile(hFile, PByte(@arr[0, 0])^, SizeOf(arr), Dummy, nil);
CloseHandle(hFile);
end; |