Después de mucho investigar... no he conseguido que funcione pero creo que sé cual es la fuente del error. Es el dbExpress.
Lo explico mejor:
1.- He creado una dll con dos funciones, una que conecta con la base de datos mediante dbExpress y otra, que hace exactamente lo mismo que la anterior pero con ADO.
2.- A ambas funciones les he puesto mensajes para saber si conectaban a base de datos y si desconectaban de las mismas. (siempre he obtenido el resultado esperado)
3.- Creo un programa con dos botones, uno llama a las primera función y el otro a la segunda función. Resultados:
a) Cuando el programa ha llamado a la primera función, al cerrar el programa da un error eterno (que se repite una y otra vez) imposible de capturar.
b) Cuando el programa NO ha llamado a la primera función, al cerrar el programa no da ningún problema (por mucho que llame a la segunda función).