我正在尝试评估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?
由于 摩尼
答案 0 :(得分:5)
您指的是Excel-DNA中的内置COM服务器支持。有几个选项,所有这些选项都适用于没有管理员权限的用户。
在这些情况下,您都不使用RegAsm - 它会将托管程序集注册为运行时激活 - 因为本机Excel-DNA .xll会调解.NET类型本身的COM激活。
如果您对提供工作表功能,色带等不感兴趣,您可能不需要Excel-DNA。您可以通过创建一个.reg脚本来注册.NET程序集以供非管理员使用,该脚本将修改HKEY_LOCAL_USER中的注册表项而不是HKEY_CLASSES_ROOT。我的意思是说Excel-DNA的非管理员注册并不是特殊的魔法。在Excel-DNA中集成此功能的主要原因是确保在与Excel-DNA加载项的其余部分相同的AppDomain中激活这些对象,这很棘手且有时很重要。