2

過去に、VS2015 を使用して COM オブジェクトの相互運用ラッパーを生成していました。COM オブジェクトは継続的に開発中であるため、インターフェイスが変更されることがあり、相互運用ラッパーを再生成する必要があります。これまでのところ問題ありません。しかし、VS2017 にアップグレードしてから、相互運用ラッパーのコードが変更されていることに気付きました。プロジェクトをコンパイルしないようにします。

具体的には、VS2015 ではプロパティが取得されますが、VS2017 ではメソッドget_set_メソッドのペアが取得されるという違いがあるようです。

たとえば、次のようなものを使用できます

string dummy = comObject.AProperty;

VS2015 で生成された COM ラッパーを使用している場合。しかし、それはに変更する必要があります

string dummy = comObject.get_AProperty();

代わりに、VS2017 で生成された COM ラッパーを使用する場合。

両方のバージョンから 2 つのラッパーを逆コンパイルすると、次のように定義されていることがわかります。

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