Как.NET/COM работает с несколькими версиями, зарегистрированными через Regasm?

Существует другая часто используемая форма единственного передаваемого владельца, и желательно к auto_ptr, потому что она избегает проблем, вызванных auto_ptr безумное повреждение семантики присвоения.

я не говорю ни о ком другом, чем swap. Любой тип с подходящим swap функция может быть задумана как умная ссылка к некоторому содержанию, которым это владеет до тех пор, пока владение передается другому экземпляру того же типа путем свопинга их. Каждый экземпляр сохраняет свои идентификационные данные, но связывается с новым содержанием. Это похоже безопасно rebindable ссылка.

(Это - умная ссылка, а не интеллектуальный указатель, потому что Вы не должны явно разыменовывать его для достигания содержания.)

Это означает, что auto_ptr становится менее необходимым - только необходимо заполнить разрывы, где типы не имеют пользы swap функция. Но все контейнеры станд. делают.

7
задан mhenry1384 11 November 2009 в 22:48
поделиться

2 ответа

Я всегда настраиваю свои COM-видимые сборки со статической AssemblyVersion именно по этой причине. Если вы хотите, чтобы двоичные файлы были помечены версией, используйте вместо этого AssemblyFileVersion.

  1. Выигрывает последний зарегистрированный объект: да
  2. Не совсем. Вы можете вставлять что-то в свою сборку ' s ComRegisterFunction / ComUnregisterFunction для автоматизации очистки, но если вы оставите старые версии, это почти единственный способ.
  3. Вы бы сделали это с другим GUID и / или ProgID кокласса (например, MyCoClass.1) , .2 и т. Д.). CoCreateInstance ничего не знает о значениях версий - они используются активатором CLR для обеспечения загрузки правильной сборки.
  4. Нет, лучше всего никогда не менять версию сборки (см. Выше).
6
ответ дан 7 December 2019 в 10:03
поделиться

Компоненты с тем же CLSID должны быть совместимы, особенно если вы меняли номер сборки только между сборками. Вот единственная подходящая вещь, которую я нашел, чтобы подтвердить это, быстро погуглил.

Чтобы ответить на ваши вопросы напрямую:

  1. Верно.
  2. regasm / unregister
  3. Посмотрите на Binding redirects .
  4. Наверное, нет.
0
ответ дан 7 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

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