delphi - programacion - lazarus tutorial
¿Cuáles son las diferencias entre la implementación de interfaces en Delphi y Lazarus(FPC)? (1)
En Free Pascal, el tipo de interfaz depende del modo. Básicamente existe el modo COM o CORBA . COM es predeterminado y más o menos compatible con Delphi. CORBA es un caso más simple sin el recuento de referencias. (y, por lo tanto, tampoco genera llamadas a funciones de recuento). Entonces, básicamente, una interfaz FPC Corba es como el antepasado hipotético de la interfaz IUnknown.
Además de esto, a veces hay algunas diferencias wrt cuando se lanzan las interfaces. Delphi tiende a ahorrar al disminuir el recuento en para el final del procedimiento o bloqueo (en procedimientos más grandes), mientras que a veces se sabe que FPC los libera antes, generalmente inmediatamente después de la declaración del último uso. Ambas son opciones legales de implementación por cierto, en base a qué alcance se usa para las variables temporales. (solo en el nivel de función, o también en bloques anidados más profundos)
Sin embargo, esto a veces revela suposiciones ocultas (malas) en el código, especialmente cuando se utilizan referencias de interfaz y referencias de objeto dentro de un procedimiento que podría "sobrevivir" en Delphi, pero no en FPC. Es un caso típico que muestra que el código de trabajo de larga duración no es necesariamente correcto. Uno solo puede notar supuestos ocultos al cambiar la implementación
(agregado más tarde :) tenga en cuenta que puede usar el estilo COM en * nix. Principalmente es la inserción de llamadas a rutinas de recuento de referencia que distinguen los dos tipos de interfaz. No es qué sistema (COM, Corba o simplemente en el recuento de referencia RTL) a las llamadas se dirigen.
Tenga en cuenta que creo que los nombres COM vs Corba para ambos tipos de interfaz fueron mal elegidos. Las interfaces de Corba se refinancian en realidad, pero tradicionalmente este refcount se maneja manualmente, porque Java no admite las interfaces manejadas externamente de manera automatizada.
Tenemos un proyecto lleno de componentes personalizados que hoy está funcionando en Lazarus y Delphi.
Estoy pensando en las interfaces de código, pero no estoy muy familiarizado con ellos. Lo que me gustaría saber es: ¿cuáles son los matices de implementación de las interfaces de Delphi y Lazarus? Hay algo de lo que debería ser especialmente consciente? ¿Tendré que codificar cosas realmente diferentes?
Explicación de fondo: creo que los componentes podrían beneficiarse de las interfaces, o al menos, aprenderé más de ellos. Por ejemplo, uno de los componentes hace la comunicación a muchos hardwares diferentes usando el puerto serie. Pero el usuario debe usar solo nuestro componente para crear la aplicación. Entonces tenemos el componente y una clase para cada uno de estos hardware que descienden de una clase base. En tiempo de ejecución creamos la clase específica dentro del componente.
No estoy seguro de que esta última explicación sea necesaria, pero puedo escribir más si alguno de ustedes lo necesita.