2012-03-06 14 views
6

Tenemos un proyecto lleno de componentes personalizados que hoy está trabajando en Lazarus y Delphi.¿Cuáles son las diferencias entre la implementación de interfaces en Delphi y Lazarus (FPC)?

Estoy pensando en las interfaces de código en él, pero no estoy mucho más 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 ellas. 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 era necesario asegurarse de que esta última explicación, pero puedo escribir más si alguno de ustedes lo necesitan.

+2

Aquí es un [ 'reading' de base] (http://www.freepascal.org/docs-html/ref/refch7.html#x84-940007) sobre las interfaces en FreePascal. Como conclusión muy rápida, diría que si se dirige a la plataforma Windows y utiliza la arquitectura COM de Windows (las interfaces que descienden de IUnknown) no habría diferencia en el código de Delphi, pero la respuesta a su pregunta debería ser más sofisticado. – TLama

+0

¿Qué quiere decir con "matices de implementación"? No parece que eso realmente te importe. Lo que importaría sería si se puede o no escribir código que * signifique * lo mismo para ambos compiladores, independientemente de cómo cada compilador realmente implemente las interfaces. –

+0

@DavidHeffernan Quiero decir "pequeñas diferencias en la implementación". Tal vez no pueda escribir código que signifique lo mismo para ambos, pero tal vez, no necesitaría escribir todas las cosas para cada compilador. Le pregunté por qué esperaba hacerlo, pero no sé si hay alguna diferencia en ambos compiladores en este caso. ¿Está esto más claro ahora? – EMBarbosa

Respuesta

11

En Free Pascal, el tipo de interfaz depende del modo. Básicamente existe el modo COM or 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 supuestos ocultos (incorrectos) en el código, especialmente cuando se usan referencias de interfaz y objetos 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 sólo puede notar supuestos ocultos al cambiar de aplicación

(añadido más tarde :) 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 el COM vs nombres CORBA para ambos tipos de interfaz se elige erróneamente. 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.

+1

+1. Este tipo de información es realmente apreciada. – EMBarbosa

Cuestiones relacionadas