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