До недавнего времени я считал, что время выполнения .NET увеличивает количество ссылок на COM-объекты на 1 при создании runtime-callable wrapper и что для любого данного объекта COM создается только одна такая оболочка, вызывающая время выполнения.Когда среда выполнения .NET имеет значение count> 1 для COM-объектов?
Если я не ошибаюсь, из вышеизложенного следует, что Marshal.FinalReleaseComObject и Marshal.ReleaseComObject делают то же самое на практике.
Однако сегодня я писал несколько тестов, чтобы проверить, что COM-объекты должным образом выпущены моим кодом. Я делаю это, вызывая предположительно выпущенный объект и проверяя ожидаемый InvalidComObjectException
. Оказывается, бывают случаи, когда исключение бросается после FinalReleaseComObject
, но не после ReleaseComObject
.
Означает ли это, что среда выполнения .NET 2.0 может содержать более одной ссылки на COM-объект? Если да, то когда это делается?