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 样本,它实际上并不需要。
这些年来一切都变得有些混乱...
在每个 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 样本,它实际上并不需要。
这些年来一切都变得有些混乱...