FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
El problema lo estas enfocando de una manera incorrecta, cada aplicacion tienen un espacio de direcciones distinto, y no se ven unas a otras, aunque pases el puntero de una aplicacion a otra (total solo es un numero una direccion de memoria) no podras hacer nada con eso para acceder a los datos de la otra aplicacion ya que te saldra un "access violation".
Tendras que usar ficheros mapeados en memoria o crear memoria compartida, para que las dos aplicaciones puedan acceder a la misma zona de memoria. Ssludos |
#2
|
||||
|
||||
jachquate, si, ambas aplicaciones están escritas en Builder.
Mick, No estoy muy seguro de que no pueda pasar punteros por los espacios de memoria diferentes. No obtengo errores "access violation", simplemente el valor se borra, como advierte la ayuda "Si se usa PostMessage". Por otro lado el propio Windows tiene mensajes para pasar texto WM_GETTEXT y WM_SETTEXT. Y con esto yo si paso texto con las API. Yo pretendo un mensaje de usuario para poder interceptarlo inequívocamente y de alguina manera emular lo que el propio windows hace... Me miraré lo de los objetos superglobales.... Gracias |
#3
|
||||
|
||||
Si se pudieran compartir punteros a través de simples mensajes me pregunto para que creo microsoft el mensaje WM_COPYDATA.
En realidad es como te dice Mick, no se pueden compartir punteros entre aplicaciones. Sin embargo con ciertos mensajes puede dar esa impresión, pero es internamente windows el que se encarga de "copiar" los datos de un proceso a otro. En resumen, yo utilizaría WM_COPYDATA que por algo lo creo microsoft |
#4
|
||||
|
||||
Muchas gracias [seoane]. Voy a seguir tu consejo.
EDITO: Parece ser que sólo se puede usar con SendMessage y no con PostMessage. Para sobrecargar la recepción de un mensaje a una aplicación en Builder, e imagino que también en delphi, solo se puede usar PostMessage. Esto obliga a utilizar otro método de sobrecarga, quizas reescribir (como ya apunté al principio) TApplication:WndProc(Messages::TMessage &Message) o en su caso usar una clase derivada de TApplication. Se me antoja que debería ser mas sencillo. Última edición por escafandra fecha: 14-02-2008 a las 21:59:47. Razón: Añado comentario |
#5
|
||||
|
||||
Una pregunta, ¿por qué no utilizar la comunicación por red, a través del loop-back (localhost ó 127.0.0.1)? Es el método que se suele utilizar en los sistemas POSIX (UNIX, Linux, Solaris, MacOS, ...), incluso para comunicar el programa con el gestor de ventanas, y en mi opinión es bastante mejor, más lento pero mucho más flexible y menos propenso a las corrupciones de memoria.
En fin, una simple opinión. |
#6
|
||||
|
||||
Pues como parece que la solución no pasa por enviar un simple mensaje, tendre que tratar de hacerlo de otra forma. La idea de la memoria compartida suena bien, pero no se como hacerlo. Tampoco se como mapear ficheros en memoria, como apuntaba Mick.
Una solución fácil puede ser escribir un fichero en disco, pero parece chapucero... |
#7
|
||||
|
||||
Pues yo insisto con lo del loop-back
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
pasar un puntero a una funcion | baby | Varios | 2 | 21-05-2007 13:10:22 |
Se Pueden Pasar Form/units de una aplicacion a otra? | Alexis De la Cr | Varios | 8 | 06-07-2006 19:05:42 |
Pasar texto de una aplicacion delphi a otra | OmarPerez | API de Windows | 4 | 13-07-2005 20:56:19 |
Recibir parametros de otra aplicacion en Delphi | Coco_jac | Varios | 1 | 30-05-2005 17:43:17 |
pasar parametros ms-dos desde mi aplicacion | ixMike | API de Windows | 5 | 13-02-2005 15:56:38 |
|