Saludos al foro
Hemos encontrado el problema de las excepciones y comparto la solución para quien pueda servirle.
El proyecto originalmente consta de un lado cliente EXE y un lado servidor DLL DCOM, originalmente todo bajo D7 a 32 bits. Cuando se hizo la portación del código servidor de D7 a XE3 para 32/64 bits, empezaron a surgir errores extraños que detectamos eran fallas de FreeAndNil por objetos no inicializados dentro de los DLL compiladas con XE3 para 64 bits, extrañamente el mismo código compilado con XE3 para 32 bits no marcaba excepciones. Hicimos pruebas con código casi identico al del proyecto combinando SO de 32/64 bits con EXE 32 bits y DLLs 32/64 bits y la unica combinacion que no marcaba error fue DLL creados con D7 corriendo en Win 64,
contrario a la documentacion de Borland/Embarcadero que dice que las variablesl locales no se inicializan y de entrada traen basura, en los watch aparecian inicializadas a nil dentro del DLL, esta extraña condicion siempre estuvo presente y por esta razon no habia excepciones. Este fue el primer detalle curioso.
Después de una maratónica sesión de google y de una lista de posibles causas, la última razón y que nadie creyó posible, fué investigar la convencion de llamada safecall (usada casi exclusivamente en interfaces DCOM) ya que en la declaracion de los eventos y métodos que generamos en las pruebas no aparece, siendo la convencion predeterminada register si no me equivoco, resulta que la particularidad que tiene safecall es establecer un "firewall" para las excepciones entre el invocador y el método invocado, aunque existan errores en el DLL no llegan al cliente y como la liberacion estaba en un bloque try finally end, se hacia todo el proceso al 100% y desaparecia la excepcion por arte de magia, ya que se debe preguntar a traves de una interfaz al objeto DCOM; al parecer siempre hubo errores pero nunca salieron a la luz.
Sumado a esto, la documentación técnica dice que para X64 ya solo existe un solo tipo de llamada y dejan de existir los fastcall, register, cdecl, safecall, etc. y obviamente esto hizo desaparecer la barrera para las excepciones y fué la receta perfecta para el desastre.
En resumen, safecall ocultaba las excepciones en 32 bits y en 64 bits solo existe un tipo de llamada y se manifestaron los errores.
Ahora solo queda buscar esas lineas propensas a fallos a ojo pelón
adiós dia lunes no laborable...