Freigeben über


Entwerfen von Remotable-Schnittstellen

Mit dem Aufkommen des Objektmodells für verteilte Komponenten ist es wichtig, dass Ihre benutzerdefinierte Schnittstelle remotable ist, auch wenn Sie sie nur in Prozessen verwenden möchten.

MIDL ist mehr als nur eine Möglichkeit, Headerdateien für Ihre Schnittstellen zu generieren. Es handelt sich um eine Programmiersprache für Remoting, mit der Sie Ihre Schnittstellen über Computer-, Prozess- und Threadgrenzen hinweg verwenden können. Dies bedeutet, dass Sie das Verhalten Ihrer von MIDL definierten Schnittstellen unter diesen Bedingungen überprüfen müssen, bevor Sie Ihr Programm für Kunden freigeben. Wenn Sie in Ihrer IDL einen Fehler gemacht haben und die Schnittstelle nicht ordnungsgemäß entfernt wurde, kann es schwierig sein, diesen Fehler zu beheben. Entweder müssen Sie Ihre Schnittstelle mit einem neuen IID überarbeiten und die alte aus Gründen der Abwärtskompatibilität belassen, oder Sie müssen jeden Client und jeden Servercomputer überall gleichzeitig konvertieren.

Auch wenn Ihre Schnittstelle niemals prozessübergreifend verwendet wird, kann sie threadübergreifend verwendet werden. Das schlimmste Problem für eine nicht überprüfte IDL-Datei kann bei Prozessservern auftreten, die mehrere Singlethread-Apartments nicht unterstützen. Ein Server, der kein Threadingmodell angibt, ist implizit singlethreaded. Alles, was als Singlethread markiert ist, wird in den Thread erzwungen, der zuerst CoInitialize oder CoInitializeEx aufgerufen hat. Wenn ein anderer Thread der war, der das Objekt aktiviert hat, müssen alle Schnittstellen auf diesem Singlethreadserver zurück zum aktivierenden Thread entfernt werden, was zu einer Rückgabe von REGDB_E_IIDNOTREG als Reaktion auf einen Aufruf von QueryInterface führen kann. Es sei denn, Sie können absolut bestätigen, dass Ihre Schnittstelle sowohl prozessintern als auch immer im selben Thread aufgerufen wird, werden Sie zu einem bestimmten Zeitpunkt entfernt.

Schließlich müssen Sie als Schnittstellen-Designer berücksichtigen, wie Clientanwendungen Ihre Schnittstelle verwenden. Zwei Dinge bestimmen zusammen, ob eine Schnittstelle über Prozess- und Computergrenzen hinweg effizient ist: die Häufigkeit von Methodenaufrufen über die Schnittstellengrenze hinweg und die Menge der Daten, die in einem bestimmten Methodenaufruf übertragen werden sollen. Obwohl COM prozess- und netzwerkübergreifende Aufrufe für Programme transparent macht, kann es keine Hochfrequenz- und Hochbandbreitenaufrufe über Adressräume hinweg effizient machen. In einigen Fällen ist es besser geeignet, Schnittstellen zu entwerfen, die normalerweise nur als prozessinterne Server implementiert werden, während andere Schnittstellen für die Remoteverwendung besser geeignet sind.