Código Delphi
[-]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ShellApi;
type
TTest = packed record
Nombre,
Apellido:string[30];
end;
ATEST=array of TTest;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
PTest:^ATEST;
FicheroM: THandle;
begin
FicheroM:=CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,SizeOf(TTest),'Datos');
PTest:=MapViewOfFile(FicheroM,FILE_MAP_WRITE,0,0,0);
with Ptest^[0] do begin
Nombre:='Pepe';
Apellido:='Alonso';
end;
with Ptest^[1] do
begin
Nombre:='Ludovico';
Apellido:='Pio';
end;
UnmapViewOfFile(PTest);
CloseHandle(FicheroM);
end;
end.
Bueno, creo que la clave está es que estás intentando pasar un array de registros, pero no has reservado memoria para cada dicho array.
si verificas esto:
antes de mapear, verás el problema.
Si leíste aquel hilo tal como te dije, también citaba esa posibilidad, reservando memoria mediante
VirtualAllocEx
Recuerda que no puedes asignar elementos a un array vacio....
Luego examinando tu código, primeramente diría que la declaración del registro es incorrecta, dado que debes crear un puntero al registro.... en este caso PDatitos..
Código Delphi
[-]
PDatitos = ^TDatitos;
TDatidos = packed record
Dato_1 : Cardinal;
Dato_2 : Cardinal;
Dato_Main : Cardinal;
Virtual_Mem_Adr : Pointer; Virtual_Men_Size : LongWord; Etc_1 : Boolean;
end;
y luego crear o defirnir el array de una longitud fija....
Código Delphi
[-]Test_Array : Array [0..10] of TDatitos;
o dinámica
Código Delphi
[-]Test_Array: Array of TDatitos;
En este caso debería ir asignando memória para cada elemento.
Luego podría hacer hago tal que esto para asignar valores al array
Código Delphi
[-]Test_Array[0].Dato_1 := 15;
Suerte.