Sdílet prostřednictvím


Pravidla návrhu rozhraní

Tato část obsahuje krátký souhrn pravidel návrhu rozhraní a pokynů. Některá z těchto pravidel jsou specifická pro architekturu MODELU COM, zatímco jiné jsou omezení uložená jazykem návrhu rozhraní MIDL. Podrobnosti o návrhu rozhraní COM naleznete v tématu Anatomie souboru IDL.

Podle definice objekt není objekt COM, pokud neimplementuje IUnknown rozhraní nebo rozhraní, které je odvozeno z IUnknown. Kromě toho platí následující pravidla pro všechna rozhraní implementovaná v objektu COM:

  • Musí mít jedinečný identifikátor rozhraní (IID).
  • Musí být neměnné. Po vytvoření a publikování se nemusí měnit žádná část definice.
  • Všechny metody rozhraní musí vrátit hodnotu HRESULT, aby části systému, které zpracovávají vzdálené zpracování, mohly hlásit chyby RPC.
  • Všechny parametry řetězce v metodách rozhraní musí být Unicode.
  • Vaše datové typy musí být vzdálené. Pokud nemůžete převést datový typ na vzdáleně dostupný typ, budete muset vytvořit vlastní rutiny zařazování a oddělování. Také LPVOID, nebo void *, nemá žádný význam na vzdáleném počítači. V případě potřeby použijte ukazatel na IUnknown.

Poznámka

Aktuální implementace MIDL nezpracuje přetížení funkce ani vícenásobné dědičnosti.

 

Další aspekty návrhu rozhraní

Používejte ukazatele na data velmi pečlivě. Chcete-li znovu vytvořit data v adresní prostoru volaného procesu, musí doba běhu RPC znát přesnou velikost dat. Pokud například parametr CHAR * odkazuje na vyrovnávací paměť znaků, nikoli na jeden znak, nelze data správně znovu vytvořit. Pomocí syntaxe dostupné v MIDL můžete přesně popsat datové struktury reprezentované definicemi typu.

Inicializace je nezbytná pro ukazatele, které jsou vloženy do polí a struktur a předány přes hranice procesu. Neinicializované ukazatele mohou fungovat při předání programu ve stejném prostoru procesu, ale proxy servery a zástupné procedury předpokládají, že všechny ukazatele jsou inicializovány s platnými adresami nebo mají hodnotu null.

Při aliasování ukazatelů buďte opatrní (což umožňuje ukazatelům odkazovat na stejnou část paměti). Pokud je aliasing úmyslný, měly by být tyto ukazatele deklarovány aliasy v souboru IDL. Ukazatele deklarované jako nealiased by se nikdy neměly vzájemně aliasovat.

Věnujte pozornost tomu, jak přidělujete a uvolníte paměť. Mějte na paměti, že pokud explicitně neřeknete objekt COM (pomocí přidělit atribut) nevoláte datovou strukturu, která byla vytvořena během volání mimo proces, tato struktura bude po dokončení volání zničena. Zvažte také potenciálně destruktivní režii vytvořenou neefektivním přidělováním datových struktur, které je teď potřeba zařaďovat a oddělit.

Při definování HRESULT návratových hodnot buďte opatrní, abyste nevytvořili kódy chyb, které jsou v konfliktu s kódy FACILITY_ITF definovanými com (hodnoty mezi 0x0000 a 0x01FF jsou rezervované) nebo které kolidují s jinými hodnotami HRES ULT se stejnou hodnotou. Pokud je to možné, použijte univerzální návratové hodnoty modelu COM a selhání a použijte parametr, nikoli HRESULT, k vrácení informací specifických pro volání funkce.

Další informace najdete v následujících tématech:

definice rozhraní a knihovny typů