Danke für eure Antworten.
Die Performance spielt eigentlich eine zweitrangige Ordnung. Das heisst, natürlich lege ich Wert darauf, dass das ganze möglichst performant ist, allerdings ist es wichtiger, dass das System überhaupt mehrere duzend Plugins geladen haben kann. Die einzelnen Plugins müssen nicht alle gleichzeitig aktiv sein. Ich habe einen Pool von Worker-Threads vorgesehen und pro Thread (bzw. Arbeitschritt) wäre nur jeweils ein Modul aktiv. Wichtig dabei ist, dass die Kommunikation sowohl von Hauptprogramm zu Modul (Modul soll eine bestimmte aufgabe erledigen für welche es sich registriert hat), als auch von Modul zu Hauptprogramm (um gewisse Statusinformationen abzufragen oder Datenbankabfragen zu tätigen).
Die
DLL-Lösung wäre von der Kommunikation her die ideale Lösung, allerdings ist sie nicht robust. In einem anderen Plugin-System, dass wir verwenden, hat einer der Entwickler einen Rekursionsfehler programmiert, was zu einem Stackoverflow geführt hat, der die ganze Applikation zum Absturz gebracht hat (Das Programm wurde ohne Fehlermeldung abgebrochen). Und so etwas darf einfach nicht passieren. Wenn etwas abstürzt, so soll es nur das betroffene Modul sein.
Die Lösung mit getrennten Prozessen und WM_COPYDATA klingt einfach, aber damit laufe ich Gefahr, dass wenn sich sich im laufe der Zeit die Schnittstelle ändert, das Hauptprogramm mit einem inkompatiblen Modul betrieben wird.
Die Lösung mit getrennten Prozessen und
COM/
COM+ klingt auch sehr interessant. Ich wusste zwar von der existenz von
COM, wäre aber nie auf die Idee gekommen das für ein eigenes Programm einzusetzen. Ich glaube ich werde mich etwas in dieses Gebiet einarbeiten.
Die MAF-Komponenten kenne ich nicht, möglicherweise können sie mir einen Haufen Arbeit sparen. Dazu muss ich mir aber das ganze genauer ansehen.
Mein Favorit ist bisher die Lösung mit getrennten Prozessen und
COM. Jetzt muss ich mal ein Grundgerüst bauen und sehen wo die schwierigkeiten liegen.