Cita:
Empezado por elliotduvorov
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.