В прошлом я использовал 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 сгенерировать оболочку взаимодействия старым способом?
Спасибо