I would advise using COM in this situation. (Note: not COM +, not ActiveX, not OLE; COM, just COM.)
Since Delphi 7 (or an earlier version, I'm not sure), this is easy to do by adding a type library to the project and the Automation object.
The advantages are pretty widely supported as in Delphi (the type library editor has everything you need and updates your code, and internal COM modules and registration are served from the ComServ module) and outside Delphi (I use it in a number of projects to interact with all kinds of applications: C ++ projects, Word and Excel documents using VBA, oldskool ASP ...).
The only drawback that I encountered may be problems with threads, in ordinary applications simple CoInitialize(nil); when you start the application will work in more complex applications, you need to think about "stream apartments" or use a free thread and make your own lock. (Which in some cases you already did.)
Stijn sanders
source share