Verwenden des vom System bereitgestellten Ersatzes
Um den vom System bereitgestellten Ersatz für Ihren DLL-Server zu verwenden, registrieren Sie die DLL, die eine leere Zeichenkette oder NULL für den DllSurrogate-Wert in der Registrierung angibt. Wenn eine Aktivierungsanforderung für einen so bezeichneten DLL-Server bei COM eingeht, startet COM den Standard-Ersatzprozess und die angeforderte DLL (durch interne Angabe der CLSID in der Launch-Befehlszeile) zur gleichen Zeit, um einen separaten Aufruf zu vermeiden. (Informationen zum Ausführen mehrerer DLL-Server in einem Ersatzprozess finden Sie unter Ersatzfreigabe.)
Die Standardimplementierung des Ersatzprozesses ist ein Pseudo-COM-Server im gemischten Threading-Modellstil. Wenn mehrere DLL-Server in einen einzelnen Ersatzprozess geladen werden, stellt dieser Prozess sicher, dass jeder DLL-Server mithilfe des in der Registrierung für diesen Server angegebenen Threadingmodells instanziiert wird. Alle geladenen Freethreaded-Server befinden sich gemeinsam im Multithread-Apartment, während jeder Apartmentthreadserver in einem Singlethread-Apartment untergebracht ist. Wenn ein DLL-Server beide Threadingmodelle unterstützt, wählt COM Multithreading aus.
Dieser Ersatzprozess wird so geschrieben, dass COM sowohl das Entladen von DLL-Servern als auch das Beenden des Ersatzprozesses verarbeitet. Die Prozesslebensdauer wird in erster Linie durch die Anzahl der gemarshallten Objekte im Ersatz bestimmt, die als heuristisches Maß für externe Abhängigkeiten vom Prozess dient. Obwohl die Absicht darin besteht, externe Abhängigkeiten darzustellen, unterscheidet dieses Lebensdauermodell nicht zwischen In-Proc- und Out-of-Proc-Marshalling. Achten Sie darauf, dass der Ersatz nicht unbeabsichtigt durch apartmentübergreifendes Marshalling oder durch auf In-Process-Marshalling basierende Mechanismen wie die globale Schnittstellentabelle oder IAgileReference angeheftet wird.
Der vom System bereitgestellte Ersatz wird für die meisten Entwickler*innen sehr gut funktionieren und überaus leicht zu bedienen sein. Allerdings können Entwickler*innen mit besonderen Überlegungen entscheiden, dass ein benutzerdefinierter Ersatz erforderlich ist. Weitere Informationen finden Sie unter Schreiben eines benutzerdefinierten Ersatzes.