![]() |
pasar un tipo de datos (array of record) entre aplicaciones
Estimados:
Desarrollo 2 aplicaciones donde la aplicación 1 debe enviarle sierta información a la aplicación 2 a travez de la memoria. Esta información es un array de una estructura de datos (array of record). Para ello utilizé el siguiente código: Aplicación 1 (aplicación que envia datos)
Aplicación 2 (receptora)
Cuando la aplicación 2 recibe el mensaje y trata de acceder al array me da un error de access violations. Que es lo que no estoy contemplando ???, o, como se debe hacer esto :) Saludos cordiales. Mau |
Una aplicacion no puede acceder a la memoria de otra aplicacion, es una medida de seguridad basica en cualquier sistema operativo decente.
Tienes que crear una zona de memoria compartida a la que se le permita acceder a otros programas, algunos ejemplos en: http://www.delphifaq.com/faq/delphi_...API/f348.shtml http://www.codeproject.com/threads/sharedmemipc.asp Saludos |
A ver si con este tema se soluciona algo....
|
Ardilla gracias por la ayuda, me sivrio mucho, pero ahora tengo un tema más :S
Probe ya usando el FileMapping y el tema es que necesito compartir un array de estructuras, y programé algo así: 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 { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var PTest:^ATEST; FicheroM: THandle; begin //Para el caso de un array, debo pasar como longitud la suma de todos sus miembros ?? FicheroM:=CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,SizeOf(TTest),'Datos'); PTest:=MapViewOfFile(FicheroM,FILE_MAP_WRITE,0,0,0); with Ptest^[0] do //Esto genera un error begin Nombre:='Pepe'; Apellido:='Alonso'; end; with Ptest^[1] do begin Nombre:='Ludovico'; Apellido:='Pio'; end; UnmapViewOfFile(PTest); CloseHandle(FicheroM); end; end. Entonces mi pregunta acá es, como se debe pasar un array de estructuras por medio de FileMapping ???. Espero se entienda, gracias por la ayuda. Mau |
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..
y luego crear o defirnir el array de una longitud fija....
o dinámica
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
Suerte. |
La franja horaria es GMT +2. Ahora son las 05:26:30. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi