過去に、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 に相互運用ラッパーを生成させる方法はありますか?
ありがとう