This is more of an architectural question for a Delphi application I'm working on... Here's the situation:
1. I plan on using DLLs to provide dynamically loaded "drivers" or code specific to functions such as background data collection (each with threads running all the time async from the main service). These DLLs may or may not be present due to variations in configurations thus the run time load using LoadLibrary().
2. There must be a common interface between the DLL and a thread created in a unit that is part of a service. This thread will be the main data collector / processor engine.
3. Asynchronous data will move between both the manager thread and the DLLs (there may be many) as well as commands (both directions - to the DLL and generated by the DLL to the service thread).
Here's the question:
What is the best vehicle for providing this interface? I have looked at Windows messaging, named pipes, callbacks, sockets, etc... what I'd really like is an interface class that both sides understand that is common in all DLLs... then each DLL can have a decendant class of the interface that implements it's unique function to communicate with the manager thread running in the service... not sure how to make this work.