For pure DLL's exceptions are not allowed to cross the DLL boundary (like Deltics mentions).
No matter what language.
You get all sorts of trouble there, especially because you don't know which language, RTL, memory manager, etc, is on each side of the boundary.
So you are back tot the classic error handling paradigm:
In stead of DLL's, you could use use BPL packages (as Lars suggested): there you know that both sides will use the same RTL and memory manager.
Both packages and BPL usually give you a versioning nightmare anyway (too many degrees of freedom).
A more rigorous solution is to go for a monolithic executable; this solves both problems:
- much easier versioning
- guaranteed only one RTL and memory manager
--jeroen
PS: I've made this an additional answer because that allows me for easier pasting of links.