【问题标题】:Excel DNA - Can I avoid doing a regasm all together?Excel DNA - 我可以避免一起做 regasm 吗?
【发布时间】:2011-10-31 15:04:46
【问题描述】:

我正在尝试评估 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 中有什么方法,我也可以在没有任何 regasm 或 regsvr32 的情况下在 VBA 中使用此类函数?

谢谢 玛尼

【问题讨论】:

    标签: excel vba regasm xll excel-dna


    【解决方案1】:

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

    • 您可以在运行时在 AutoOpen 中注册 COM 类型 - 然后它们将在 VBA 的后期绑定中可用(因此在 VBA 中调用这些 COM 类型的所有内容都将是“Variant”并且您不会获得智能感知)。
    • 您可以将 COM 类型注册到 regsvr32,使用 .xll 作为您的 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 中激活,这很棘手,有时也很重要。

    【讨论】:

    • 感谢您澄清 Govert。对我来说,第二个选项听起来不错。只是为了确认一下,您的意思是说 excel dna 上的 regsvr32 .xll 不需要管理员权限,因为它只对 HKLU 进行注册表项。因为,我知道当您通常在本机 dll 上运行 regsvr32 时,它确实需要管理员权限。
    • 这个玛尼的情况如何?我也有类似情况
    猜你喜欢
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    相关资源
    最近更新 更多