RCW и подсчет ссылок при использовании COM-взаимодействия в C #

У меня есть приложение, использующее сборки взаимодействия Office. Мне известно о «Runtime Callable Wrapper (RCW)», управляемом средой выполнения. Но я не очень уверен, как увеличивается счетчик ссылок. MSDN сообщает:

RCW хранит только одну ссылку на обернутый COM-объект независимо от количество управляемых клиентов, вызывающих его.

Если я правильно понимаю, в следующем примере

using Microsoft.Office.Interop.Word;

static void Foo(Application wrd)
{
    /* .... */
}

static void Main(string[] args)
{
    var wrd = new Application();
    Foo(wrd);
    /* .... */
}

я передаю экземпляр wrd другому методу. Но это не увеличивает счетчик внутренних ссылок. Поэтому мне интересно, в каких сценариях счетчик ссылок увеличивается? Может ли кто-нибудь указать на сценарий, при котором счетчик ссылок увеличивается?

Также я читал блог, в котором говорится, что при программировании с COM-объектами не следует использовать двойные точки. Что-то вроде wrd.ActiveDocument.ActiveWindow . Автор утверждает, что компилятор создает отдельные переменные для хранения значений, которые увеличивают счетчик ссылок. ИМХО, это неправильно и первый пример это доказывает. Это правильно?

Любая помощь будет отличной!

20
задан Kara 7 April 2014 в 21:53
поделиться