Personalmente porrei classi interfaccia negli header file e le implementazioni nelle dll e userei le interfaccie come parametri. Viceversa crei problemi di dipendenza tra le dll (se ne aggiorni una, probabilmente dovrai aggiornare anche l'altra).