过去,我一直在使用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以旧的方式生成互操作包装?
谢谢