Felülettervezési szabályok
Ez a szakasz a felülettervezési szabályok és irányelvek rövid összefoglalását tartalmazza. Ezen szabályok némelyike a COM-architektúrára vonatkozik, míg mások a MIDL felülettervező nyelv által előírt korlátozások. A COM-felület kialakításának részleteiért lásd IDL-fájl anatómiáját.
Az objektum definíció szerint nem COM-objektum, kivéve, ha az IUnknown interfészt vagy IUnknown-ből származó felületet valósít meg. Ezenkívül a com-objektumon implementált összes felületre a következő szabályok vonatkoznak:
- Egyedi felületazonosítóval (IID) kell rendelkezniük.
- Nem módosíthatók. A létrehozásuk és közzétételük után a definíciójuk egyik része sem változhat.
- Minden felületi metódusnak egy HRESULT értéket kell visszaadnia, hogy a rendszer távoli feldolgozást kezelő részei RPC-hibákat jelentsenek.
- A felületi metódusok összes sztringparaméterének Unicode-nak kell lennie.
- Az adattípusoknak újrakondenzálásnak kell lenniük. Ha egy adattípust nem tud átalakítani újramunkálható típussá, akkor létre kell hoznia a saját marsallálási és leválasztási rutinokat. Emellett LPVOID, vagy üres *, nincs értelme egy távoli számítógépen. Ha szükséges, mutatóval IUnknown.
Jegyzet
A MIDL jelenlegi implementációja nem kezeli a függvények túlterhelését vagy többszörös öröklését.
Egyéb felülettervezési szempontok
Nagyon óvatosan használjon mutatókat az adatokhoz. Ha a meghívott folyamat címterében szeretné újra létrehozni az adatokat, az RPC futási idejének ismernie kell az adatok pontos méretét. Ha például egy KARAKTER * paraméter nem egy karakterre, hanem egy karakter pufferére mutat, az adatok nem hozhatók létre megfelelően újra. Használja a MIDL-ben elérhető szintaxist a típusdefiníciók által képviselt adatstruktúrák pontos leírásához.
Az inicializálás elengedhetetlen a tömbökbe és struktúrákba beágyazott és a folyamathatárokon áthaladó mutatókhoz. A nem inicializált mutatók akkor működnek, ha ugyanabban a folyamattérben lévő programnak adnak át, de a proxyk és a csonkok feltételezik, hogy az összes mutató inicializálva van érvényes címekkel, vagy null értékűek.
Legyen óvatos a mutatók aliasolásakor (lehetővé téve, hogy a mutatók ugyanarra a memóriarészre mutasson). Ha az aliasolás szándékos, ezeket a mutatókat aliasként kell deklarálni az IDL-fájlban. A nem aliasedként deklarált mutatóknak soha nem szabad egymást aliasként tekintenie.
Ügyeljen arra, hogy miként foglaljon le és szabadíts fel memóriát. Ne feledje, hogy ha explicit módon nem mondja meg egy COM-objektumnak (a attribútum lefoglalásával), hogy ne szabadítson fel egy folyamaton kívüli hívás során létrehozott adatstruktúrát, a rendszer a hívás befejeződésekor megsemmisíti a struktúrát. Vegye figyelembe azt a potenciálisan romboló többletterhelést is, amelyet az adatstruktúrák nem hatékony felosztása okoz, amelyeket most marsallnak és nem kell használni.
Végül ügyeljen a HRESULT visszaadott értékek meghatározására, hogy ne hozzon létre olyan hibakódokat, amelyek ütköznek a COM által definiált FACILITY_ITF kódokkal (0x0000 és 0x01FF közötti értékek fenntartottak), vagy amelyek ütköznek más HRESULT értékekkel ugyanazzal az értékkel. Amikor csak lehetséges, használja az univerzális COM sikerességi és hiba-visszaadási értékeit, és használjon paramétert a HRESULThelyett a függvényhívásra vonatkozó információk visszaadásához.
További információkért tekintse meg a következő témaköröket:
- Remotable Interfaces tervezése
- COM-felületi használata
Kapcsolódó témakörök