Do niedawna uważałem, że środowisko wykonawcze .NET tylko zwiększa liczbę odwołań obiektów COM o 1 podczas tworzenia runtime-callable wrapper i że dla danego obiektu COM tworzony jest tylko jeden taki wrapper do wywoływania w środowisku wykonawczym.Kiedy środowisko wykonawcze .NET wstrzymuje liczbę odwołań> 1 dla obiektów COM?
Jeśli się nie mylę, powyższe oznacza, że Marshal.FinalReleaseComObject i Marshal.ReleaseComObject robią to samo w praktyce.
Jednak dzisiaj pisałem kilka testów, aby zweryfikować, czy obiekty COM są poprawnie zwolnione przez mój kod. Robię to poprzez wywoływanie rzekomo zwolnionego obiektu i sprawdzanie oczekiwanego InvalidComObjectException
. Okazuje się, że są przypadki, w których wyjątek jest zgłaszany po FinalReleaseComObject
, ale nie po ReleaseComObject
.
Czy to oznacza, że środowisko wykonawcze .NET 2.0 może zawierać więcej niż jedno odwołanie do obiektu COM? Jeśli tak, kiedy to robi?