Plugin Archikektur ohne COM+



  • Ich würde gerne wissen, ob es möglich ist, eine Pluginarchitektur zu schreiben, die von allen möglichen C++ compilern unter Windows unterstüzt wird, ohne COM+ benutzen zu müssen. Ich sehe ein Problem im unterschiedlichen name-mangling der verschiedenen Compiler. Wie kann ich ein Objekt aus einer DLL importieren, die mit verschiedenen Compilern gebaut wurden und es in meinem Host-Programm nutzen?



  • Mit extern "C". Du darfst dann halt nur keine Klassen nach aussen geben, wenn es auch unter C verwendet werden soll.
    extern "C" stellt u.a. das Name-Mangling ab. Such mal danach im forum, da gibts X-Threads.

    Beispiel:

    struct Plugin
    {
      void* handle;  
    };
    
    extern "C" 
    Plugin* LoadPlugin(int version)
    {
    }
    

    Wenn du das so exportierst, dann ist das für alle Compiler lesbar.
    rya.



  • Wenn Du eine DEF-Datei beim erzeugen der DLL verwendest, hast Du keine Probleme. Dann sind die Namen genau so, wie sie sein müssen.



  • Plugin schrieb:

    Ich würde gerne wissen, ob es möglich ist, eine Pluginarchitektur zu schreiben, die von allen möglichen C++ compilern unter Windows unterstüzt wird, ohne COM+ benutzen zu müssen.

    Genau dafür gibt es COM. Warum willst du es nicht benutzen?
    (Du kannst natürlich auch nur auf die Prinzipien von COM (Safecall-Aufrufkonvention, Interfaces, IIDs, IUnknown) aufbauen, ohne die konkrete Implementation von Windows einsetzen zu müssen. Aber ohne das wird es nicht gehen.)

    Plugin schrieb:

    Ich sehe ein Problem im unterschiedlichen name-mangling der verschiedenen Compiler. Wie kann ich ein Objekt aus einer DLL importieren, die mit verschiedenen Compilern gebaut wurden und es in meinem Host-Programm nutzen?

    Gar nicht; die Namensdekorierung ist noch das geringste Problem. Dazu kommt, daß unterschiedliche Compiler, ja sogar unterschiedliche Versionen eines Compilers verschiedene Aufrufkonventionen, andere Standardbibliotheken verwenden, unterschiedliche Exception-Codes und -Informationen benutzen, das binäre Layout unterschiedlich handhaben und insbesondere RTTI und Polymorphismus vollkommen individuell implementieren.

    Edit: E2293 ')' erwartet



  • Scheint so, als ob ich nicht um dieses COM dingens herumkomme. Kann mir wer ein Tutorial dazu empfehlen?



  • Kann man auch CORBA als ersatz für COM nehmen?


Anmelden zum Antworten