Marshal.ReleaseComObject(Object) Metoda

Definice

Sníží počet odkazů obálky volatelného modulu runtime (RCW) přidruženého k zadanému objektu COM.

public:
 static int ReleaseComObject(System::Object ^ o);
[System.Security.SecurityCritical]
public static int ReleaseComObject (object o);
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static int ReleaseComObject (object o);
public static int ReleaseComObject (object o);
[<System.Security.SecurityCritical>]
static member ReleaseComObject : obj -> int
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member ReleaseComObject : obj -> int
static member ReleaseComObject : obj -> int
Public Shared Function ReleaseComObject (o As Object) As Integer

Parametry

o
Object

Objekt COM, který se má uvolnit.

Návraty

Int32

Nová hodnota referenčního počtu RCW přidružených k o. Tato hodnota je obvykle nulová, protože rcW uchovává pouze jeden odkaz na zabalený objekt COM bez ohledu na počet spravovaných klientů, kteří ji volají.

Atributy

Výjimky

o není platný objekt COM.

Poznámky

Tato metoda slouží k explicitní kontrole životnosti objektu MODELU COM používaného ze spravovaného kódu. Tuto metodu byste měli použít k uvolnění podkladového objektu MODELU COM, který obsahuje odkazy na prostředky včas nebo když je nutné uvolnit objekty v určitém pořadí.

Pokaždé, když ukazatel rozhraní MODELU COM přejde do modulu CLR (Common Language Runtime), je zabalený ve formátu RCW.

Analýza RCW má počet odkazů, který se zvýší při každém namapování ukazatele rozhraní MODELU COM na něj. Metoda ReleaseComObject sníží počet odkazů rcW. Když počet odkazů dosáhne nuly, modul runtime uvolní všechny jeho odkazy na nespravovaný objekt COM a vyvolá System.NullReferenceException výjimku, pokud se pokusíte objekt použít dále. Pokud je stejné rozhraní MODELU COM předáno vícekrát od nespravovaného do spravovaného kódu, počet odkazů na obálku se pokaždé zvýší a volání ReleaseComObject vrátí počet zbývajících odkazů.

Tato metoda umožňuje vynutit vydání referenčního počtu RCW tak, aby k němu došlo přesně v případě, že chcete. Nesprávné použití ReleaseComObject však může způsobit selhání aplikace nebo může způsobit porušení přístupu.

Představte si scénář, ve kterém se spravovaný kód v doméně aplikace drží ve verzi RCW, která představuje komponentu MODELU COM. Pokud zavoláte metodu ReleaseComObject rcW, spravovaný kód nebude mít přístup k RCW a vyvolá InvalidComObjectException výjimku.

Pokud se při vydání rcW spustí volání RCW, může dojít k vážné chybě. V tomto případě existuje dobrá šance, že vlákno, které volá, způsobí porušení přístupu. Paměť procesu však může být poškozena a proces může běžet dál, dokud se nezdaří z důvodů, které jsou velmi obtížné ladit.

Toto riziko se sloučí, když je použitá komponenta COM singleton, z následujícího důvodu: CLR aktivuje komponenty MODELU COM voláním funkce COM CoCreateInstance , která vrátí stejný ukazatel rozhraní pokaždé, když se volá pro komponenty com singleton. Proto samostatné a nezávislé části spravovaného kódu v doméně aplikace můžou používat stejnou rcW pro jednu komponentu COM a pokud některý z nich volá metodu ReleaseComObject komponenty COM, druhá bude přerušena.

Proto používejte ReleaseComObject pouze v případě, že je to naprosto povinné. Pokud chcete tuto metodu volat, abyste zajistili, že je komponenta MODELU COM vydána v určené době, zvažte místo toho použití FinalReleaseComObject metody. FinalReleaseComObject uvolní podkladovou komponentu MODELU COM bez ohledu na to, kolikrát se znovu zadala clR. Počet interních odkazů RCW se zvýší o jeden při každém opětovném zadání komponenty COM do modulu CLR. Proto můžete metodu ReleaseComObject volat ve smyčce, dokud vrácená hodnota není nula. Tím dosáhnete stejného výsledku FinalReleaseComObject jako metoda.

Platí pro

Viz také