2

过去我一直在使用 VS2015 为 COM 对象生成互操作包装器。COM 对象正在开发中,因此有时接口会发生变化,我必须重新生成互操作包装器。到目前为止没有问题。但是自从我升级到 VS2017 后,我注意到互操作包装器的代码发生了变化。使我的项目无法编译。

具体而言,区别似乎是在 VS2015 中我会获得属性,但在 VS2017 中我会获得一对get_andset_方法。

例如我可以使用类似的东西

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 以旧方式生成互操作包装器?

谢谢

4

0 回答 0