在每个 Excel DNA RTD 示例中,RTD 服务器实现。被标记为 COM 可见。示例: https: //github.com/Excel-DNA/Samples/blob/master/RtdClocks/RtdClock-ExcelRtdServer/RtdClockServer.cs
根据我的测试,当 Excel DNA 插件添加到 Excel 时,不需要 COM 可见性。
实施 RTD 的原因是什么?COM 可见吗?
从 Excel 使用基于 Excel-DNA 的 RTD 服务器有两种方法:
XlCall.RTD(...),或者,ExcelDna.ComInterop.ComServer.DllRegisterServer())然后=RTD(...)直接调用该函数。对于正常的第一种情况,您是对的,ComVisibleRTD 服务器不需要 - Excel-DNA 在内部进行连接并公开类而无需注册。对于第二种情况,需要 ComVisible(显式地或通过ComVisible在类型或程序集上没有指令 - 因为默认值为ComVisible“true”)将类型注册为 COM 导出。
ProgId如果您尝试使用包装函数,但有一个在 Excel 中注册的稳定函数,以便在重新打开保存的工作表时可以使用“旧值”,那么这个故事会有点复杂。在这种情况下,您需要注册 COM 并将您的包装器更改为调用XlCall.Excel(XlCall.xlfRtd, ...).
所以你是对的,对于大多数 Excel-DNA 样本来说,实际上并不需要它。
这些年来,一切都变得有点混乱......