2011-06-27 18 views
9

Bien, tenemos un problema interesante.¿Es posible volver a compilar los paquetes DataSnap en Delphi XE con una versión nueva/diferente de Indy?

Algunos antecedentes:

  1. Nuestro principal aplicación utiliza Indy 10. Sin embargo, tomamos la Indy 10 origen y corregir errores en el mismo, volver a compilar e instalar nuestro propio conjunto de Indy componentes.

  2. Estamos migrando a Delphi XE y queremos comenzar a utilizar DataSnap.

  3. DataSnap requiere la versión "oficial, de envío" de Indy que es incompatible con nuestra versión personalizada de Indy.

  4. Nuestros servidores DataSnap serán aplicaciones separadas, pero dado que tenemos nuestra propia Indy instalada en el IDE, no podemos "cruzar las corrientes".

bien, por lo tanto, son incapaces de utilizar DataSnap de Delphi XE fuera de la caja debido a este problema de compatibilidad.

Así que mi pregunta es la siguiente:

¿Es posible volver a compilar los paquetes DataSnap en Delphi XE con una nueva versión/diferente de Indy?

Sus pensamientos han sido aceptados con gratitud.

+0

¿Por qué DataSnap no funciona con su versión de Indy? ¿Estás cambiando la interfaz? –

+0

Nunca he podido encontrar los DPK para estos paquetes. –

+0

@David - Hmm. No es seguro. Comprobando ... y dicen que no lo creen. Esa podría ser una ruta hacia una solución: aplique nuestras correcciones a la versión de envío. Hemos estado usando una versión más nueva de Indy, pero la versión de envío XE podría funcionar. –

Respuesta

3

La creencia común es No, eso no es posible debido a que no todas las fuentes son provistas por Embarcadero y algunas de estas fuentes dependen de la construcción de Indy tal como se envió. (Lo cual es extremadamente frustrante para los usuarios finales ya que la versión de Indy que se envía con Delphi está desactualizada relativamente rápido y, a veces, la versión seleccionada en ese momento no es necesariamente una muy buena.)

Relacionados SO pregunta: Is it possible to use Indy 10.5.8.0 in Delphi XE and DataSnap?

Véase también la página del proyecto Indy: http://www.indyproject.org/Sockets/Docs/indy10Installation.de.aspx que establece:

Nota: En D/CB/RAD 2009+, DataSnap utiliza Indy 10 internamente. La instalación de una nueva versión de Indy dejará inservible DataSnap , ya que no podrá cargar los paquetes de Indy. DataSnap está compilado contra los paquetes Indy que se envían con el IDE, y DataSnap no puede ser recompilado por los usuarios finales . Si necesita utilizar DataSnap, , deberá mantener los paquetes originales de Indy 10 para usar en los proyectos de DataSnap .

Se ha dicho que la próxima versión debería permitir actualizaciones más fáciles de Indy.

+1

regla de oro: nunca use componentes sin código fuente completo – mjn

+4

Embarcadero abordará el problema de DataSnap/Indy en la próxima versión de XE2 para que los usuarios puedan actualizar Indy de forma independiente sin romper DataSnap. –

+1

@Mjn: el problema es que DataSnap es una biblioteca Delphi ... ¡no debe usar todo el RTL/VCL porque no tiene un código fuente completo (paquetes ...)! : D –

2

Si se incluye toda la fuente DataSnap, por supuesto es posible utilizar algún tipo de programa de análisis ejecutable PE para detectar qué clases y unidades se utilizan en BPL (ya que los BPL son solo DLL personalizados). Se proporciona una muy fácil de usar con GExperts.

En BPLS, las líneas de la lista de exportaciones GExperts \ Información de PE tienen un formato como @xp $ @ [nn] [unitName] @ [TypeName] (por tipos) y @ [unitName] {@ [Tipo >]} @ [Unidad elemento global como procedimientos o variables] (para el resto).

Puede guardar esa lista en un archivo y GREP para obtener una lista de las Unidades utilizadas en un BPL.

ejemplos reales (vcl140.bpl):

  • @ $ $ XP 11Forms @ TForm
  • @ Appevnts @ @ TCustomApplicationEvents Activar
  • @ @ Clipbrd portapapeles
+0

+1 excelente truco. –

Cuestiones relacionadas