tlbimp.exe / генерация COM-взаимодействия: другой результат в VS2017 - PullRequest
0 голосов
/ 05 марта 2019

В прошлом я использовал VS2015 для создания оболочки взаимодействия для COM-объекта.COM-объект находится в стадии разработки, поэтому иногда меняется интерфейс, и мне приходится заново создавать оболочку взаимодействия.Пока проблем нет.Но с тех пор, как я обновился до VS2017, я заметил, что код оболочки взаимодействия изменился.Заставить мой проект не скомпилироваться.

Конкретно, похоже, разница в том, что в VS2015 я получаю свойства, но в VS2017 я получаю пару методов get_ и set_.

например, я мог бы использовать что-то вроде

string dummy = comObject.AProperty;

при использовании созданной VS2015 оболочки COM.Но вместо этого он должен был бы измениться на

string dummy = comObject.get_AProperty();

при использовании созданной VS2017 оболочки COM.

Декомпилируя две оболочки из обеих версий, я вижу, что они определеныкак это:

VS2015

[TypeLibType(4176)]
  [Guid("XXXXXXX")]
  [ComImport]
  public interface Iv6ComFrame
  {
  //snip
    [DispId(232)]
    DesignList FaceList { [DispId(232), MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] [return: MarshalAs(UnmanagedType.Interface)] get; }
  //snip
  }

В VS2017

  [Guid("XXXXXXXXX")]
  [TypeLibType(TypeLibTypeFlags.FHidden | TypeLibTypeFlags.FDual | TypeLibTypeFlags.FDispatchable)]
  [ComImport]
  public interface Iv6ComFrame
  {
    //snip
    [DispId(228)]
    [SpecialName]
    [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
    [return: MarshalAs(UnmanagedType.Interface)]
    DesignList get_FaceList();
    //snip
  }

Есть ли способ заставить VS2017 сгенерировать оболочку взаимодействия старым способом?

Спасибо

...