FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Busca en google "delphi shared memory" y encontraras documentacion de sobra,
por ejemplo: http://www.eagle9.nl/main/Programmin.../ProgShMem.asp Saludos |
#2
|
||||
|
||||
Cita:
Gracias. |
#3
|
||||
|
||||
Correcto shared memory funciona.
He implementado una clase para hacerlo y utilizando esa clase, con dos líneas de programación, consigo comunicar los dos programas con éxito. El tema del loop-back lo investigaré mas despacio. También parece interesante. Gracias. EDITO: Pero... al pasar punteros tengo problemas si copio sus contenidos en memoria local del proceso. En el servidor, copio el contenido de un array de texto (char*) al shared memory dimensionado para tal. En el cliente copio esa memoria a un array de dimensión conocida. Si hago este último paso, termino teniendo errores en otras zonas de código, posiblemente por corrupción de memoria. Algo hago mal o no es un buen sistema para pasar arrays. Seguiré investigando. Última edición por escafandra fecha: 19-02-2008 a las 20:47:31. Razón: Añado comentario |
#4
|
||||
|
||||
Bueno, los elementos del arreglo deben estar "auto contenidos" en la misma zona de memoria compartida. En c un array de texto (char*) es, en realidad, un array de punteros... por lo que volvemos al inciso 1.
Si te las arreglas para que todos los datos estén en la zona compartida, no te dará problemas. Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#5
|
||||
|
||||
Cita:
Por otro lado, creo que en algunas ocasiones el sistema puede impedirte la creación de memoria compartida. ¿Puedes hacerlo si el programa corre sin identificarse como administrador?. |
#6
|
||||
|
||||
No tengo C a mano, y dado que no lo uso mas que eventualmente, no creo ser el mas adecuado para hablar de esto. Pero char* no es un puntero a una cadena terminada en nulo?
Si "copias" el contenido del puntero, lo que estas copiando es eso, el puntero.. que del otro lado, apuntará a una dirección que no existe. Por que no probás, por ejemplo, en lugar de esto, construir un arreglo de caracteres en la memoria compartida. Se me hace mas fácil de explicar en pascal: el equivalente al tipo string[x] o a un array[0..x] of char. Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#7
|
||||
|
||||
No. char* es un puntero a un caracter (char), o mas bien, un número de 16 bits. Por convenio, las cadenas en C terminan en nulo, Así con un puntero a un char (char*) puedes referirte a una cadena si quieres. Así char* apunta el primer caracter de la cadena. El nulo te indica el final de la cadena, de esta forma no tienes que conocer su longitud. Evidentemente para que char* sea una cadena de caracteres, se debe tener reservada memoria consecutiva + un caracter que será el nulo.
Yo copio esa memoria consecutiva, desde el primen cáracter hasta el nulo, incluido en la memoria compartida, es decir, en esa memoria no hay punteros, solo valores de tipo char (caracteres). Que es lo que tratas de explicar en pascal (string[x] o a un array[0..x] of char). No se si me explico bien. Saludos. Última edición por escafandra fecha: 20-02-2008 a las 11:06:15. |
|
|
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 |
|