Dela via


Utforma fjärranslutningsbara gränssnitt

Med tillkomsten av den distribuerade komponentobjektmodellen är det viktigt att ditt anpassade gränssnitt är fjärrkommunikationsbart, även om du endast tänker använda det i processen.

MIDL är mer än bara ett sätt att generera huvudfiler för dina gränssnitt. Det är ett programmeringsspråk för fjärrkommunikation som gör att du kan använda gränssnitt över maskin-, process- och trådgränser. Det innebär att du måste verifiera beteendet för dina MIDL-definierade gränssnitt under dessa förhållanden innan du släpper programmet till kunderna. Om du gjorde ett misstag i din IDL och gränssnittet inte fjärrhanteras korrekt kan det vara svårt att åtgärda det misstaget. Antingen måste du ändra gränssnittet med ett nytt IID och lämna det gamla i för bakåtkompatibilitet eller så måste du konvertera varje klient och varje serverdator överallt samtidigt.

Även om ditt gränssnitt aldrig kommer att användas utanför processen kan det användas över trådgränser. Det värsta problemet för en omarkerad IDL-fil kan uppstå för processerver som inte stöder flera entrådade lägenheter). En server som inte anger en trådmodell är implicit enkeltrådad. Allt som markerats med en tråd tvingas över till tråden som först kallades CoInitialize eller CoInitializeEx. Om någon annan tråd var den som aktiverade objektet, måste alla gränssnitt på den entrådade servern fjärranslutas tillbaka till den aktiverande tråden, vilket kan resultera i en återgång av REGDB_E_IIDNOTREG som svar på ett anrop till QueryInterface). Såvida du inte absolut kan hävda att gränssnittet både är i processen och alltid kommer att anropas på samma tråd, kommer du att fjärranslutas någon gång.

Slutligen måste du som gränssnittsdesigner överväga hur klientprogram ska använda ditt gränssnitt. Två saker avgör tillsammans om ett gränssnitt ska vara effektivt över process- och datorgränser: frekvensen för metodanrop över gränssnittsgränsen och mängden data som ska överföras i ett visst metodanrop. Även om COM gör korsprocess- och nätverkssamtal transparenta för program, kan det inte göra högfrekventa och högbandbreddsanrop effektiva över adressutrymmen. I vissa fall är det lämpligare att utforma gränssnitt som normalt endast implementeras som processerver medan andra gränssnitt är lämpligare för fjärranvändning.