tlbimp.exe / COM互操作生成:VS2017中的结果不同

时间:2019-03-05 02:41:39

标签: c# visual-studio-2017 com-interop tlbimp

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

具体的区别似乎是在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以旧的方式生成互操作包装?

谢谢

0 个答案:

没有答案