Salve.
Ho un piccolo problema per il quale chiedo un consiglio.
Supponiamo di avere una classe base di questo tipo:

codice:
class IPlugin
{
	public:
		virtual void Init() = 0;
		virtual void Work() = 0;
		virtual const char* GetModuleName() = 0;
};
Ora voglio che un utente esterno possa estendere tale classe e implementare dei comportamenti opportuni. Per fare quindi una prova al volo, ho scritto una cosa del genere (sono solo delle prove quindi perdonate errori di qualsiasi genere, concentratevi sul concetto):

codice:
#include "stdafx.h"

class IPlugin
{
	public:
		virtual void Init() = 0;
		virtual void Work() = 0;
		virtual const char* GetModuleName() = 0;
};

class MyLib : public IPlugin
{
	public:
		void Init() { OutputDebugStringA("Init ok\n"); }
		void Work() { OutputDebugStringA("Run ok\n");  }
		const char* GetModuleName() { return "MyLib"; }
};


extern "C" __declspec(dllexport) IPlugin* Create() { return new MyLib(); }
Nel programma host ho poi richiamato il tutto usando una cosa del genere
codice:
#include <Windows.h>


class IPlugin
{
	public:
		virtual void Init() = 0;
		virtual void Work() = 0;
		virtual const char* GetModuleName() = 0;
};

typedef IPlugin* (*create)();


int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR cmdline, int nCmdShow)
{
	create CreateLib;

	HMODULE lib = LoadLibraryA("Lib.dll");
		CreateLib = (create)GetProcAddress(lib,"Create");

		IPlugin *p = CreateLib();
		p->Init();
		p->Work();
		OutputDebugStringA(p->GetModuleName());

		delete p;
	FreeLibrary(lib);

	return 0;
}
Quello che però avevo in mente è un pò diverso e credo richieda l'utilizzo di più pattern.

L'intento è "chiedere" alla DLL quali sono le classi che essa esporta e poi scegliere dal programma host quale implementazione chiedere alla DLL.

Un esempio pratico chiarirà meglio la situazione

Programma host: leggi file .conf
Nel file conf c'è scritto -> carica dll1, dll2 e dll3
Per ogni dll il programma la carica e chiede: "Mi dai la lista delle classi che implementano l'interfaccia Plugin che abbiamo concordato?"
La dll da la lista.

Sempre nel file conf c'è scritto: "Questa cosa devi gestirla con l'implementazione A e quest'altra con l'implementazione Z"
Il programma cerca in quale HMODULE è implementata dale classe e ne chiede un puntatore.

Spero di essere stato chiaro.
Grazie in anticipo per l'aiuto.