Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-01-2009
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Hola avmm2004, aca te paso el ejemplo que escribi en aquel momento que lo probe, es muuuuy sencillo, simplemente escribe una variable en la memoria y la lee.

El programa esta en turbo delphi, pero no debería haber problema de compilarlo en otra versión.

Simplemente compila el programa y luego ejecuta varias instancias de mismo. Veras que puedes modificar el valor de la variable desde un programa y luego leerlo desde otro de forma transparente.
__________________
[Crandel]
Responder Con Cita
  #2  
Antiguo 06-01-2009
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Bueno ... me dio un poco de verguenza mandartelo asi no mas, todoqueteado como niño de primaria al código de nuestro amigo Al.

Asi que aca te dejo la versión limpia y prolija. Donde lo único que debes hacer es modificar la clase MySuperGlobalClass con lo que quieras y no tocar la clase de Al.


.
Archivos Adjuntos
Tipo de Archivo: zip superglobal.zip (6,1 KB, 85 visitas)
__________________
[Crandel]
Responder Con Cita
  #3  
Antiguo 20-11-2015
elliotduvorov elliotduvorov is offline
Registrado
 
Registrado: sep 2008
Posts: 3
Poder: 0
elliotduvorov Va por buen camino
Buenas,

Para empezar perdón por el reflote...

Me ha surgido la necesidad de compartir objetos entre dos aplicaciones distintas, y he encontrado este hilo.

Mi duda:

El objeto que quiero compartir es un TORASession de los componentes ODAC de DevArt.

Mi idea seria hacer algo así:

Código Delphi [-]
TMiSuperObjetoSesion = Class(TSuperGlobalObject)
  Public
    MiSesion: TOraSession;
End;

Para después en cada aplicación hacer algo parecido a esto:

Código Delphi [-]
MiSesionLocal.AssignConnect(TMiSuperObjetoSesion.MiSesion);

Creéis que seria viable???

Gracias y un saludo.
Responder Con Cita
  #4  
Antiguo 20-11-2015
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Hola elliotduvorov, bienvenido al club. Como a todos los novatos, te invitamos a que revises la Guía de Estilo si no lo has hecho ya.

Respecto a tu pregunta, no estoy seguro de que vaya a funcionar ya que no creas ningún objeto. Realmente no he usado nunca este código, pero viendo el código adjuntado por Crandel, creo que deberías hacer algo así:
Código Delphi [-]
  TYPE
    TMiSuperObjetoSesion = CLASS (TSuperGlobalObject)
    PUBLIC
      MiSesion: TOraSession;
    END;

  VAR
    ElObjetoSesionGlobal: TMiSuperObjetoSesion;

  BEGIN
    ElObjetoSesionGlobal := TMiSuperObjetoSesion. Create;
    MiSesionLocal.AssignConnect (ElObjetoSesionGlobal.MiSesion)
  END

De todas formas, ten en cuenta las limitaciones de las que habla Al en la cabecera de su código, ya que el objeto "MiSesion" podría darte problemas. El artículo de la bitácora del máster Al incluye más información acerca del mecanismo, y dará pistas de qué se puede y qué no y por qué.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine

Última edición por Ñuño Martínez fecha: 20-11-2015 a las 17:55:34.
Responder Con Cita
  #5  
Antiguo 24-11-2015
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cita:
Empezado por elliotduvorov Ver Mensaje
El objeto que quiero compartir es un TORASession de los componentes ODAC de DevArt.

Mi idea seria hacer algo así:

Código Delphi [-]
TMiSuperObjetoSesion = Class(TSuperGlobalObject)
  Public
    MiSesion: TOraSession;
End;

Para después en cada aplicación hacer algo parecido a esto:

Código Delphi [-]
MiSesionLocal.AssignConnect(TMiSuperObjetoSesion.MiSesion);
Si lees las premisas que expone Al sobre la implementación de TSuperGlobalObject te darás cuenta que este objeto reside en la memoria compartida.

Del curso Object Pascal 1.0, sabrás que las instancias de Objetos habitualmente viven en el Heap de tu aplicación, y que las variables de tipo objeto (TMyObject) son realmente un puntero a esta memoria.

De tal cuenta, en la aplicación donde originalmente creas la sesión, tendrás un puntero a una dirección de memoria válida, pero en cualquier otra aplicación que tenga acceso a este objeto super-global (incluso otra instancia de la misma aplicación) esa dirección a) puede no ser válida b) si lo es, definitivamente no residirá allí la instancia del objeto que esperas (lo cual es mucho peor).

Lo que se vislumbra es un Access Violation, o la corrupción de memoria de la segunda aplicación (la que no ha creado originalmente el sub-objeto MiSesion).

Dicho esto, aunque encontraras la forma de compartir la información de la sesión, la verdad no estoy seguro que se pueda compartir una sesión de Oracle entre varias aplicaciones, en todo caso habrá que revisar la documentación y el por qué quieres compartir la sesión antes de continuar.

Un saludo.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 24-11-2015
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Genial Al, muchas gracias por compartir. En la noche haré pruebas pero de entrada me ha llamado mucho la atención.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #7  
Antiguo 24-11-2015
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por jhonny Ver Mensaje
En la noche
¿Esta noche o dentro de otros siete años?

// Saludos
Responder Con Cita
  #8  
Antiguo 24-11-2015
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por roman Ver Mensaje
¿Esta noche o dentro de otros siete años?

// Saludos
Esta , pues es que sólo hasta hoy me enteré
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Objetos Perdidos. marcoszorrilla La Taberna 8 04-05-2007 19:50:23
copia de objetos emeceuy OOP 3 11-12-2006 03:59:55
Prioridades de Objetos JerS Varios 2 10-11-2005 13:53:10
Una lista de Objetos en .NET bustio .NET 1 11-10-2004 15:23:08
Objetos jfontane Varios 1 04-07-2003 15:39:04


La franja horaria es GMT +2. Ahora son las 07:24:09.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi