if the DLL doesn't use sysUtils,
It does :cry:

, but don't rely on exceptions for handling potential problems.
I don't really rely on them, I use the nested try... blocks for debugging, where each except block adds its words to the log and re-raises the exception.

Being unable to catch AVs would complicate the debugging immensely, making all this mechanism useless.
It seems, I must think more and re-check carefully if the memory gets trashed somewhere. Maybe the exception handling mechanisms in the exe and dll conflict somehow? After all, the dll calls the functions exported from the exe a lot, and all of them are wrapped internally in the try... blocks.

Damn. I knew I should have used interfaces!