需要一种更好的方法来创建COM互操作

时间:2017-03-22 22:44:14

标签: c# .net com com-interop

我需要在.NET项目中使用BITS COM https://msdn.microsoft.com/en-us/library/windows/desktop/aa362708(v=vs.85).aspx。我不能使用包装BITS界面的第三方库,但坦率地说,无论如何都没有很大的选择。所以,显然我一直坚持生成RCW(https://msdn.microsoft.com/en-us/library/5dxz80y2(v=vs.110).aspx),最常规的做法是tlbimp.exe,它完成了它的工作,但有警告。在结果中,我有一个标记为ComConversionLoss

的结构
[ComConversionLoss]
[StructLayout(LayoutKind.Explicit, Size = 8, Pack = 4)]
public struct BG_AUTH_CREDENTIALS_UNION {
}

很可能是因为它是C ++中的联合而且tlbimp.exe不知道如何正确生成它。这种情况的唯一建议是用ildasm.exe反编译生成的DLL修复它并重新编译。我认为技术上我可以做到,但如果有更好的方式我可能不知道,我宁愿不要。    我也发现tlbimp2.exe在我的情况下没有帮助,所以我正在寻找一个更好的替代tlbimp.exe,它能够处理这种情况并理想地生成带有IDisposable实现的COM包装器确定性控制COM对象的生命周期,但这是一个单独的问题。首先,我需要其他工具来正确处理我的情况(C ++联合类型)。有人知道这样的工具吗?

1 个答案:

答案 0 :(得分:0)

作为一般规则,开发.NET是为了完全取代COM。 .NET和COM之间存在向下兼容性。但优先顺序显然是:.NET代码(MSIL)> COM>本地代码。

有一个常用的第三方.NET BITS库。你最好只使用它而不是完全使用COM互操作。 https://stackoverflow.com/a/2299642/3346583 Sharp BITS是可用的开源软件,因此我认为您可以将它用于编码需求。

相关问题