Was ist denn ein "Out-Of-Process COM Server"??



  • hallo,

    kann mir jemand von euch evtl. erklären was ein "Out-Of-Process COM Server" sein soll? bin ratlos! die MSDN Library hat mir irgendwie nich wirklich weiter geholfen.

    danke
    MJ



  • InprocServer befinden sich in einer Dll. Diese werden in Deine Anwendung geladen und laufen dann auch in diesem Process. Out-Of-Process Server laufen in einem anderen Process. Ein solcher Server könnte zum Beispiel in einer eigenen Exe untergebracht sein, die dann extra angestartet wird. Ein solcher Server kann sich dann auch auf einem ganz anderen Rechner aufhalten.



  • Ein COM objekt ist ein binäres Objekt, mit dem du über COM Interfaces kommunizierst. Das ganze ist (konzeptionell) relativ platformunabhängig.

    Ein COM-Server ist ein (platform-spezifisches) Binary, das eins oder mehrere COM Objekte implementiert.

    Ein in process COM server läuft im gleichen Prozeß wie der Client. Ein Out of process server läuft dementsprechend in einem anderen Prozeß.

    Unter Windows wäre das z.B. ein DLL oder eine .EXE. DLL's sind meist in-process, EXE immmer out-of-process - server.

    die COM Runtime kümmert sich darum, daß dieser prozeß transparent ist, d.h. du bekommst nicht mal unbedingt was davon mit.
    (z.B. kann man mit ein paar registry-Einträgen eine DLL in einen Surrogat-prozeß setzen und die vom DLL implementierten Objekte laufen ohne das du was merkst in einem fremden Prozeß)

    Das "out of process" kann natürlich noch viel weiter weg sein - z.B. ein prozeß auf einem Server in Hawaii.

    Wenn du mit einem out-of-process - Objekt arbeitst*, arbeitest du zwar mit dem gleichen interface, aber das interface wird nur von einem Proxy-Objekt implementiert, das die parameter einfach "einpackt" und an den anderen Prozeß schickt. Dort wartet schon ein Stub, der die Parameter auspackt, die Methode im eigentlichen Objekt aufruft, den rückgabewert einpackt und an den proxy zurückschickt, der das ergebnis auspackt und zurückgibt.

    😉 passiert eigentlich schon bei einem cross-apartment-aufruf. Das ist aber wieder ein neues thema...



  • danke erstmal... habs fast kapiert 🙂

    aber was ich noch nicht ganz verstanden habe:
    muss ein out-of-process server eine EXE sein? oder kann der auch eine DLL sein?

    und wie genau würde man mit einem out-of-process server von einer anderen applikation aus kommunizieren? hab das prinzip von proxy/stub noch nicht genau verstanden...

    vielen dank
    MJ



    1. Ein DLL-Server kann auch in einen sog. "Surrogatprozeß" geladen werden, und damit out of process laufen.

    2. Du merkst davon (normalerweise) nichts, sofern:
      - Das COM-Objekt keine prozeßspezifischen resourcen hin-und-hergibt
      - Die Proxy/Stub-DLL mit gebaut, installiert und registriert wurden

    Die proxy/Stub-DLL's registrieren sich für die entsprechenden Interfaces. Bei z.B. CoCreateInstance merkt die OCM laufzeit sebständig das das objekt in einem separaten prozeß läuft, lädt proxy+stub in den jeweiligen prozeß, und gibt dir den gewünschten Interface-Zeiger, aber auf das proxy-Objekt zurück. Du merkst ersmal gar nicht, daß das interface nicht vom "eigentlichen" Objekt implementiert ist.


Log in to reply