В COM: я должен назвать AddRef после CoCreateInstance?

Если честно, используйте прокси, если можете

Если вы действительно не можете использовать прокси, вы можете добиться этого, используя сеттеры и геттеры

Хотя это означает повторное объявление вашего исходного объекта x, я предполагаю, что он объявлен встроенным, как Минимальный, Полный и Проверяемый пример в вашем вопросе

let x = {
  _a: 1,
  _b: 2,
  get a() {
    return this._a;
  },
  get b() {
    return this._b;
  },
  set a(value) {
    console.log(`changing a from ${this._a} to ${value}`);
    this._a = value;
  },
  set b(value) {
    console.log(`changing b from ${this._b} to ${value}`);
    this._b = value;
  }
};
x.a = 3;

22
задан mmutilva 14 March 2009 в 03:17
поделиться

2 ответа

Контракт с COM - каждый раз, когда Вам вручают объект от функции как это, такой как CoCreateInstance (), QueryInterface () (который является тем, что CoCreateInstance () в конечном счете называет), и т.д., вызываемый всегда называет AddRef () перед возвратом и вызывающей стороной (Вы) всегда Выпуск (), когда Вы сделаны.

Можно использовать CComPtr <> для создания этого более простым, и он просто делает правильную вещь.

Теперь, если необходимо раздать этот указатель на другой объект, который ожидает, что это будет применимо вне времени жизни объекта, затем необходимо назвать AddRef () перед выделением его.

Я рекомендую Существенный COM Don Box для дополнительных материалов для чтения по этой теме.

26
ответ дан 29 November 2019 в 04:51
поделиться

Короче говоря: Нет.

Вы не должны называть AddRef в своем коде.

Ссылочный счетчик, который имеет COM-объект, 1 после CoCreateInstance.

Так, если Вы, которыми разъединением вызова, ссылочный счетчик будет 0 и COM-объект, будете расположены.

9
ответ дан 29 November 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: