Consumir el ensamblado de.NET en Delphi XE2
delphi-xe2 hydra (4)
Tengo parte de la lógica empresarial implementada en .NET y parte en Delphi. Ahora planeo actualizar a Delphi XE2.
¿Tenemos alguna disposición para consumir el ensamblado .net de Delphi XE2?
Actualización: escuché sobre el marco de Hydra que nos permite integrar código administrado y no administrado. ¿Alguien puede explicar más sobre esto con una pequeña demostración / fragmento de código?
Actualización: He intentado algunas cosas en la versión de prueba de este marco de Hydra . Pero también es necesario modificar su ensamblado .NET para crear una interfaz, de modo que podamos mapear esto con el código Delphi.
¿Hay alguna manera de consumir el ensamblado de .NET sin modificarlo?
Eche un vistazo a AToZed CrossTalk , puede consumir ensamblajes .NET directamente sin usar interoperabilidad COM.
Nilesh, solo puedo responder esto desde la presidencia de Delphi 6 , así que ten en cuenta que Delphi XE2 puede tener opciones de interoperabilidad de .NET más nuevas.
Así que para consumir (su) funcionalidad de ensamblado .NET desde (su) aplicación Delphi 6, la manera más simple es modificar el ensamblado de .NET para que sea COM visible y simplemente consumir dicha interfaz COM de la manera normal en Delphi.
Del proyecto .NET ; extrae la funcionalidad que necesitas en una interfaz (o interfaces) aplica un atributo GUI a esas interfaces. En las opciones del proyecto, marque el proyecto como "COM Visible" y vuelva a generarlo. Deberá registrar el ensamblado con COM (ejecute regsvr desde la línea de comandos si la memoria se sirve).
De Delphi ; realice una importación de la biblioteca de tipos para obtener el TLB de la DLL del ensamblado, luego simplemente CoCreate () con el GUID correspondiente y consuma al igual que cualquier otro librabrillo COM.
Puedes hacer lo que se llama exportaciones no gestionadas .
Delphi Prism lo admite en el lenguaje, C # / VB.NET no lo hace. Pero hay una plantilla de proyecto para usar eso, ver en el sitio del autor .
Las exportaciones no gestionadas es una técnica que permite el código administrado de llamada de código nativo sin interoperabilidad COM. El Sr. Giesecke tiene un artículo sobre el tema .
Acerca de XE2, la única característica nueva de ruptura posible será de 64 bits.
Pero desde el punto de vista COM, puede importar que un objeto COM se implemente o se invoque en un código de 32 bits o de 64 bits.
Los tipos de objetos COM se registran a través de claves de registro. Esto es lo que hace la utilidad regasm.exe (escribe en el registro). Nodos de registro de bits de 32 bits y claramente distintos de los nodos de registro de 64 bits.
Por ejemplo, si su objeto COM está compilado como 32 bits, se registrará en el registro de 32 bits o en el registro de 64 bits (a través de llamadas reagasm
)
Pero si se queda con la aplicación Delphi de 32 bits, no tendrá ningún problema adicional si especifica que el contenedor COM se exportará como 32 bits. En resumen, XE2 se comporta exactamente igual que cualquier versión anterior de Delphi, al crear procesos de 32 bits.
Consulte http://www.gfi.com/blog/32bit-object-64bit-environment para obtener información adicional.
Otra solución podría ser ejecutar el objeto COM fuera del proceso : en este caso, el bit-ness no tendrá importancia, y no debería tener ningún problema de 32 o 64 bits.
Tenga en cuenta que hubo un error muy molesto en XE2 : en resumen, el acceso COM se rompió en algunos casos. Parece que el último "Paquete de actualización 2" resolvió el problema.
Por supuesto, si utiliza las características multiplataforma de Delphi XE2, su objeto COM no estará disponible en Mac OS X.;)