Marshal.ReleaseComObject(Object) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Sníží počet odkazů modulu RUNTIME Callable Wrapper (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
Nová hodnota referenčního počtu RCW přidružená 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ří jej volají.
- Atributy
Výjimky
o
není platný objekt COM.
o
je null
.
Poznámky
Tato metoda se používá k explicitní kontrole životnosti objektu COM použitého ze spravovaného kódu. Tuto metodu byste měli použít k uvolnění základního objektu com, který obsahuje odkazy na prostředky včas nebo když objekty musí být uvolněny v určitém pořadí.
Pokaždé, když ukazatel rozhraní COM vstoupí do modulu CLR (Common Language Runtime), je zabalen do RCW.
RCW má počet odkazů, který se navyšuje pokaždé, když je na něj namapován ukazatel rozhraní MODELU COM. Metoda ReleaseComObject sníží počet odkazů RCW. Když počet odkazů dosáhne nuly, modul runtime uvolní všechny své odkazy na nespravovaný System.NullReferenceException objekt COM a vyvolá výjimku, pokud se pokusíte objekt použít dále. Pokud je stejné rozhraní MODELU COM předáno vícekrát z nespravovaného spravovaného kódu, počet odkazů na obálku se pokaždé navyší 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 došlo přesně v případě, že chcete. Nesprávné použití ReleaseComObject aplikace však může způsobit selhání aplikace nebo narušení přístupu.
Představte si scénář, ve kterém spravovaný kód v doméně aplikace drží rcw, který představuje komponentu MODELU COM. Pokud zavoláte metodu ReleaseComObject na RCW, spravovaný kód nebude mít přístup k RCW a vyvolá výjimku InvalidComObjectException .
K vážnější chybě může dojít v případě, že se při uvolnění rcw spustí volání rcw. V tomto případě je velká pravděpodobnost, že vlákno, které volá, způsobí narušení přístupu. Paměť procesu však může být poškozena a proces může běžet až do selhání z důvodů, které je velmi obtížné ladit.
Toto riziko je složeno, když je použit komponenta COM, je singleton, z následujícího důvodu: CLR aktivuje komponenty modelu COM voláním funkce COM CoCreateInstance , která vrací stejný ukazatel rozhraní pokaždé, když je volána pro jednoúčelové komponenty COM. Proto samostatné a nezávislé části spravovaného kódu v doméně aplikace mohou používat stejnou RCW pro jednoúčelovou komponentu COM, a pokud jeden z nich volá metodu ReleaseComObject na komponentě COM, druhý bude poškozen.
Proto použijte pouze v ReleaseComObject případě, že je to nezbytně nutné. Pokud chcete volat tuto metodu, aby se zajistilo, že součást modelu COM je uvolněna v určeném čase, zvažte použití FinalReleaseComObject metody místo toho. FinalReleaseComObject uvolní podkladovou komponentu modelu COM bez ohledu na to, kolikrát znovu vstoupila do modulu CLR. Počet interních odkazů RCW se při každém opětovném vstupu komponenty modelu COM do MODULU CLR navyšuje o jeden. Proto můžete metodu ReleaseComObject volat ve smyčce, dokud vrácená hodnota nebude nulová. Tím dosáhnete stejného výsledku jako metoda FinalReleaseComObject .
Platí pro
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro