gpt4 book ai didi

Excel DNA - 我可以避免一起重高潮吗?

转载 作者:行者123 更新时间:2023-12-02 16:15:35 25 4
gpt4 key购买 nike

我正在尝试评估Excel DNA在我的 Excel 插件之一中使用它。我使用 C# 函数 (.NET 4.0),并希望从 Excel 调用这些函数。我感兴趣的原因是,我的插件的用户是非管理员,因此如果我能找到一种解决方案,不对我的 .NET dll 进行 regasm,从而使我的插件正常工作,这将是一个突破。

我明白,如果它像一个工作表函数(具有简单的返回类型和参数),如:private string Add (int a, double b)我可以使用 excel dna 轻松地包裹暴露它们。另外,据我了解,我还可以使用 VBA 中的 Application.Run 调用这些简单的函数。

但是,如果 API 中涉及复杂类型并且想要从 VBA 使用它,那么我是否需要重新压缩该程序集和类型?示例如下:

private MyType AddLogic (myType1 A,  myType2 B) 

或者在 Excel DNA 中有什么方法,我也可以在 VBA 中使用此类函数,而无需任何 regasm 或 regsvr32 ?

谢谢玛尼

最佳答案

您指的是Excel-DNA 中内置的COM 服务器支持。有几个选项,所有这些选项对于没有管理员权限的用户来说都可以正常工作。

  • 您可以在运行时在 AutoOpen 中注册 COM 类型 - 然后可以从 VBA 进行后期绑定(bind)(因此 VBA 中调用这些 COM 类型的所有内容都将是“变体”,并且您无法获得智能感知)。
  • 您可以使用 regsvr32 注册 COM 类型,使用 .xll 作为 COM 服务器。 Excel-DNA 将其类型注册在注册表的 HKEY_LOCAL_USER 部分中,用户始终可以写入该部分。然后,即使未加载 .xll 加载项,使用 COM 公开类型的 VBA 项目也将运行。<
  • 要为 COM 公开的类型添加类型库信息,您必须进行 regsvr32 注册,这同样无需管理员权限即可工作,然后您可以在 VBA 中获得智能感知等。

在这些情况下,您都不会使用 RegAsm(它注册托管程序集以进行运行时激活),因为 native Excel-DNA .xll 会调解 .NET 类型本身的 COM 激活。

如果您对提供工作表功能、功能区等不感兴趣,您可能不需要 Excel-DNA。您可以通过创建一个 .reg 脚本来注册 .NET 程序集以供非管理员从 VBA 使用,该脚本将纠正 HKEY_LOCAL_USER 而不是 HKEY_CLASSES_ROOT 中的注册表项。我的意思是说,Excel-DNA 的非管理员注册并不是什么特殊的魔法。在 Excel-DNA 中集成此功能的主要原因是为了确保这些对象在与 Excel-DNA 加载项的其余部分相同的 AppDomain 中激活,这很棘手,但有时很重要。

关于Excel DNA - 我可以避免一起重高潮吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7955550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com