3

我正在尝试评估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 ?

谢谢玛尼

4

1 回答 1

5

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

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

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

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

于 2011-10-31T17:41:55.383 回答