FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 |
#2
|
|||
|
|||
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 Última edición por Mick fecha: 25-10-2007 a las 18:03:29. |
#3
|
||||
|
||||
A ver si con este tema se soluciona algo....
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO |
#4
|
|||
|
|||
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 |
#5
|
||||
|
||||
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.
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Pasar datos entre forms | Phacko | Varios | 8 | 20-09-2007 23:58:08 |
Pasar datos entre formularios | davitcito | OOP | 1 | 29-06-2005 09:48:03 |
Pasar parametros entre aplicaciones | Iceman | OOP | 2 | 14-06-2005 16:29:25 |
Como Asignar Variable Tipo Array de Tform a otro Array del Mismo tipo | morfeo21 | Varios | 5 | 17-08-2004 17:39:51 |
Pasar mensajes entre aplicaciones | snuffer | Varios | 4 | 21-11-2003 01:44:21 |
|