> However, if I use the same module in a DLL it doesn't work -
> specifically it appears that the OnDataAvailable event is never fired.

Which version of Indy are you actually using? TIdTelnet uses a separate
thread internally for reading incoming telent data asynchronously. Does
TIdTelnet have a ThreadedEvent property in your version of Indy? If not,
then TIdTelnet always uses TThread.Synchronize() to trigger the
OnDataAvailable event, and as such the thread calling the DLL and thus using
the TIdTelnet requires an active VCL message queue be present in order to
handle Synchronize() requests properly.