C# tlbimp.exe/COM互操作生成:VS2017中的不同结果
过去,我一直在使用VS2015为COM对象生成互操作包装器。COM对象正在进行开发,因此有时接口会更改,我必须重新生成互操作包装器。到目前为止没有问题。 但是自从我升级到VS2017之后,我注意到互操作包装器的代码已经改变了。使我的项目无法编译 具体地说,区别似乎在于,在VS2015中,我将获得属性,但在VS2017中,我获得了一对C# tlbimp.exe/COM互操作生成:VS2017中的不同结果,c#,visual-studio-2017,com-interop,tlbimp,C#,Visual Studio 2017,Com Interop,Tlbimp,过去,我一直在使用VS2015为COM对象生成互操作包装器。COM对象正在进行开发,因此有时接口会更改,我必须重新生成互操作包装器。到目前为止没有问题。 但是自从我升级到VS2017之后,我注意到互操作包装器的代码已经改变了。使我的项目无法编译 具体地说,区别似乎在于,在VS2015中,我将获得属性,但在VS2017中,我获得了一对get和set方法 我可以用像这样的东西 string dummy=comObject.a属性 如果使用VS2015生成的COM包装。但它必须改变为 string d
get
和set
方法
我可以用像这样的东西
string dummy=comObject.a属性代码>
如果使用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
}
2017年
[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以旧的方式生成互操作包装器
谢谢您可以尝试tlbimp的旧版本,直到找到好的版本: