Re: Call functions in parent from a runtime loaded DLL
 
"Ajay Kalra" <ajaykalra@yahoo.com> wrote in message 
news:uzqMBx%23xGHA.4960@TK2MSFTNGP05.phx.gbl...
You can do this if the main application has exported the methods. 
Typically
the app will expose its functionality thru an object model using 
automation.
You will then use COM to access that functionality. It all depends upon 
the
application for which the plugin is being written. What app is it? Does it
have an object model?
COM automation could be overkill for a simple plug-in that only works with 
one app.  A much simpler system is to pass abstract base class interfaces:
  *** NOTE:  this is pseudo code, so ignore any syntax errors and focus on 
the intent!
Say the DLL exports a function called
  BOOL "C" __declspec(dllexport) InitPlugin (IMainApp *pMainApp);
where IMainApp is an abstract base class:
class IMainApp
{
public:
    virtual  void CallFromDLL() = 0;
    virtual  void CallFromDLL2() = 0;
    ...
};
And the main app implements the interface:
class CMainApp : public CWinApp, IMainApp
{
    ...
// IMainApp
    virtual void CallFromDLL();
     virtual void CallFromDLL2();
}
Then the main app inits the plug-in, e.g.
CMainApp::LoadPlugins()
{
   HINSTANCE hLib = LoadLibrary ( _T("theplugin.dll") );
   InitPluginFunc = GetProcAddress (hLib, _T("InitPlugin"));
   InitPluginFunc (this);
}
Now the plugin has this nice IMainApp interface to call it's host 
application.  To reciprocate, InitPlugin() could be changed to return an 
IPlugin, an interface for the main app to call the plugin:
  (IPlugin *) "C" __declspec(dllexport) InitPlugin (IMainApp *pMainApp);
Interfaces like this let you avoid exporting entire classes and the need to 
make sure compiler and version settings are the same between app and 
plug-in, etc.  You get the benefit of using classes, just like COM objects, 
but without the pain of GUID's, the registry, threading models, and all that 
complexity you don't need considering you don't need system-wide components.
-- David
http://www.dcsoft.com