2011-10-31 57 views
3

我想评估Excel DNA在我的一个excel插件中使用它。我使用C#函数(.NET 4.0)并希望从Excel调用这些函数。我感兴趣的原因是,我的插件的用户是非管理员,因此将是一个突破,如果我可以找到一个解决方案,不要对我的.NET DLL进行重新设计,让我的插件工作。Excel DNA - 我可以避免一起做一个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?

感谢 玛尼

回答

5

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

  • 您可以在您的AutoOpen在运行时注册COM类型 - 那么他们将提供后期绑定从VBA(所以一切都在VBA中调用这些COM类型将是“变”和你没有智能感知)。
  • 您可以使用.xll作为COM服务器,使用regsvr32注册COM类型。 Excel-DNA将其类型注册到注册表的HKEY_LOCAL_USER部分,用户可以随时写入该部分。然后,即使没有加载.xll加载项,使用COM暴露类型的VBA项目也会运行。
  • 要为COM暴露类型添加类型库信息,您必须执行regsvr32注册,该注册在没有管理员权限的情况下再次运行,然后在VBA中获得智能感知等。

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

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

+0

谢谢澄清Govert。对我来说,第二个选项听起来不错。只是为了确认,你的意思是说excel dna .xll上的regsvr32不需要管理员权限,因为它只向HKLU注册表项。因为,我知道当你通常在原生dll上运行regsvr32时,它确实需要管理员权限。 –

+0

这是计划,但当然你也应该测试一下。 – Govert

+0

这个玛尼怎么样?我也遇到类似的情况 – nicolas

相关问题