【问题标题】:Need a better way to create COM interop需要一种更好的方法来创建 COM 互操作
【发布时间】:2017-03-22 22:44:14
【问题描述】:

我需要在我们的 .NET 项目中使用 BITS COM https://msdn.microsoft.com/en-us/library/windows/desktop/aa362708(v=vs.85).aspx。我不能使用包装 BITS 接口的 3rd 方库,但坦率地说,无论如何也没有什么大的选择。所以,显然我坚持生成 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++ 联合类型)。有人知道这样的工具吗?

【问题讨论】:

    标签: c# .net com com-interop


    【解决方案1】:

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

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

    【讨论】:

    • 我理解你的意思,只是为了避免将讨论切换为“为什么不使用包装器”,我说“我不能使用包装 BITS 接口的 3rd 方库”。我看到了夏普 BITS。它只是 BITS COM 的包装,但根据我们公司的政策,我不能使用它。问题是在哪里可以找到 tlbimp.exe 的更好替代方案,如果有一个可以为 BITS COM 正确生成 RCW。
    • 您可以随时游说更改该政策。随着编程现实的变化,有关它的政策必须适应。公司政策实际上可能是静态的,可以在这里使用——像设计指南这样更容易改变的东西可能会更好。例如,我的计算机俱乐部在雕像中有月费。出于法律原因,Wich 需要公证员进行更改。他们对雕像进行了一项更改,上面写着“确切的价值参见费用表”。现在他们可以更改费用,而无需任何进一步的公证员参与,因为费用表要简单得多。
    猜你喜欢
    • 2012-08-30
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 2012-03-03
    • 2011-02-18
    • 2013-12-16
    相关资源
    最近更新 更多