Excel DNA 和 RTD 服务器 COM 可见性

Excel DNA and RTD server COM visibility

在每个 Excel DNA RTD 样本中,RTD 服务器实现。被标记为 COM 可见。示例:https://github.com/Excel-DNA/Samples/blob/master/RtdClocks/RtdClock-ExcelRtdServer/RtdClockServer.cs

根据我在将 Excel DNA 插件添加到 Excel 时的测试,不需要 COM 可见性。

制作RTD impl的原因是什么? COM 可见?

从 Excel 开始,有两种方法可以使用基于 Excel-DNA 的 RTD 服务器:

  • 没有注册和内部调用 XlCall.RTD(...)
  • 的包装器 UDF
  • 通过注册类型(调用 ExcelDna.ComInterop.ComServer.DllRegisterServer())然后直接调用 =RTD(...) 函数。

对于正常的第一种情况,您是对的,RTD 服务器不需要 ComVisible - Excel-DNA 在内部执行 hook-up 并公开 class无需注册。对于第二种情况,ComVisible 是必需的(明确地或通过在类型或程序集上没有 ComVisible 指令 - 因为 ComVisible 的默认值是 'true')以将类型注册为COM 导出。

如果你尝试使用包装函数,这个故事会有点复杂,但是有一个稳定的 ProgId 注册了 Excel 这样 'old values' 可以在保存 sheet 是 re-opened。在这种情况下,您需要进行 COM 注册并更改包装器以调用 XlCall.Excel(XlCall.xlfRtd, ...).

所以你是对的,对于大多数 Excel-DNA 样本,它实际上并不需要。

这些年来一切都变得有些混乱...