Página 1 de 1

BaseSocket

Publicado: Mar Feb 10, 2009 6:57 pm
por rafa
Esta es la clase esqueleto que estoy portando de Delphi a Xailer.
Cualquier ayuda / sugerencia será bienvenida, ya que de Xailer se el 10%
y del Delphi el 5%, asi que , vamos despacio, cuando tengo un tiempo
libre, pero seguro ;-)
Si ejecutais el proyecto, podeis ver como simplemente el cambiar una
property este lanzará eventos , que era donde más estaba perdido.
Actualmente esta clase NO HACE NADA, es a efectos teoricos/practicos,
pero que será de utilidad cuando termine las funciones de sockets/etc..
Saludos
Rafa Carmona
--

BaseSocket

Publicado: Mié Feb 11, 2009 9:46 am
por rafa
Por cierto, hay un bug en el debug, si poneis un break point de un
method cualquiera que contenta la variable de instancia FlActive, y
pulsais para ver el contenido de Self, casca;
**************************** Registro de errores
*****************************
Exe: C:Xailersockets_delphisockets.exe
Version: 1.0.0.0
User name: Administrador
Computer name: 9CBFA95150F64AA
Fecha: 02/11/09
Hora: 09:45:58
Memoria libre: 209148
Area actual: 1
------------------------- Información del compilador
--------------------------
Versión Xailer: Xailer 2.0.0 Version 2.0 beta
Compilador: xHarbour build 1.2.0 Intl. (SimpLex) (Rev. 623221)
PCode Version: 9
Compilador C/C++: Borland C++ 5.5.1 (32 bit)
Plataforma: Windows XP Professional 5.01.2600 Service Pack 2
----------------------- Información detallada del error
-----------------------
Subsistema: BASE
Código de error: 1004
Estado: .F.
Descripción: Message not found
Operación: TBASESOCKET:LACTIVE
Argumentos:
Fichero:
Código error SO: 0
Pila de llamadas:
TBASESOCKET:LACTIVE (0)
__OBJSENDMSG (0)
DBGGETPROPERTY (119)
XA_DBGGETVAR (219)
TBASESOCKET:_LACTIVE (172)
TFORM1:RADIO1CLICK (58)
TRADIO:ONCLICK (0)
(b)XRADIO:XRADIO (47)
TRADIO:CLICK (0)
(b)XCONTROL:XCONTROL (145)
TRADIO:COMMAND (0)
TSCROLLINGWINCONTROL:WMCOMMAND (254)
TFORM1:WMCOMMAND (899)
RUNFORM (0)
TAPPLICATION:RUN (209)
MAIN (15)

BaseSocket

Publicado: Mié Feb 11, 2009 2:07 pm
por jfgimenez
Rafa,
me temo que el error se debe a la forma de declarar las propiedades en la
clase. P.ej., la línea:
property lActive INIT .F. read ::FlActive write SetActive
debes dejarla como:
property lActive INIT .F. write SetActive
o mejor aún como:
property lActive INIT .F. write method SetActive
Te explico: Xailer siempre crea automáticamente la DATA interna Fxxxx con el
mismo nombre que la propiedad pero con una F delante, y esa DATA es
PROTECTED. Si no se usa la cláusula READ, Xailer crea una por defecto, que
devuelve el valor de Fxxxx. Lo mismo ocurre para la cláusula WRITE.
Al poner tú la cláusula READ como ::FlActive, se está creando un codeblock
así: {|| ::FlActive }, y al ser FlActive PROTECTED, da un error al acceder
desde fuera de la clase, en este caso desde el debugger. Sí, sé que no
debería dar este error, y lo revisaremos.
En resumen, si quitas completamente la cláusula READ, verás que ya no se
produce el error. Por cierto, el mecanismo interno por defecto de Xailer
para devolver y/o asignar los valores de una propiedad, es decir, sus
métodos READ y WRITE propios, son muchísimo más rápidos y eficientes que los
codeblocks.
Por otro lado, si a la cláusula READ o WRITE le añades METHOD, como en la
tercera línea del ejemplo, estarías indicando expresamente que se trata de
un métod, y Xailer lo resuelve al crear la clase. De la misma forma, si
utilizas READ INLINE o WRITE INLINE estarías indicando expresamente que se
trata de un codeblock. Si pones solamente READ o WRITE, Xailer tiene que
averiguar por su cuenta si es un método o un codeblock, y le cuesta un poco
más.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info

BaseSocket

Publicado: Mié Feb 11, 2009 4:50 pm
por rafa
Jose F. Gimenez escribió:
> Rafa,
> property lActive INIT .F. write method SetActive
Muchas gracias por las explicaciones!
>
> Te explico: Xailer siempre crea automáticamente la DATA interna Fxxxx con el
> mismo nombre que la propiedad pero con una F delante, y esa DATA es
> PROTECTED. Si no se usa la cláusula READ, Xailer crea una por defecto, que
> devuelve el valor de Fxxxx. Lo mismo ocurre para la cláusula WRITE.
>
> Al poner tú la cláusula READ como ::FlActive, se está creando un codeblock
> así­: {|| ::FlActive }, y al ser FlActive PROTECTED, da un error al acceder
> desde fuera de la clase, en este caso desde el debugger. Sí­, sé que no
> deberí­a dar este error, y lo revisaremos.
>
Jejeje, ¿ ves como se te habí­a pasado algo por alto ? No te preocupes ,
que a mí­ me pasa de toooo ;-)
Por lo que entiendo, no es necesario especificar el READ/WRITE en la
property, pues implí­citamente devuelve/modifica Fxxxx, con delphi es
explí­citamente ;-)
( Dios, que lí­o mental de clases de objetos..... )
Umm. interesante, voy a cambiarlo todo otras vez.
Saludos
Rafa Carmona