Excel DNA – 我可以避免一起做一个regasm吗?

我正在尝试评估Excel DNA以在我的Excel插件中使用它。 我使用C#函数(.NET 4.0),并希望从Excel中调用这些函数。 我感兴趣的原因是,我的插件的用户是非pipe理员,因此将是一个突破,如果我可以find一个解决scheme,不要在我的.NET DLL的重做,让我的插件工作。

我明白,如果它像一个工作表函数(与简单的返回types和参数),如下所示: private string Add (int a, double b)我可以轻松地包装暴露他们使用excel dna。 另外,我明白,我也可以使用VBA中的Application.Run来调用这些简单的函数。

但是,如果我有一个复杂的types参与API,并希望从VBA使用这个,那么我是否需要regasm该汇编和types? 示例如下所示:

 private MyType AddLogic (myType1 A, myType2 B) 

或者在Excel DNA中有任何方法,我也可以在VBA中使用这种types的函数,而不需要regasm或regsvr32?

感谢玛尼

您指的是Excel-DNA中的内置COM服务器支持。 有几个选项,它们都可以在没有pipe理员权限的情况下正常工作。

  • 你可以在运行时在你的AutoOpen中注册COMtypes – 它们将从VBA的后期绑定(所以在VBA中调用这些COMtypes的所有东西都是'Variant',而你没有intellisense)。
  • 您可以使用regsvr32注册COMtypes,使用.xll作为您的COM服务器。 Excel-DNA将其types注册到registry的HKEY_LOCAL_USER部分,用户可以随时写入该部分。然后即使没有加载.xll加载项,使用COM暴露types的VBA项目也将运行。
  • 要为COM暴露的types添加types库信息,您将不得不执行regsvr32注册,该注册在没有pipe理员权限的情况下再次运行,然后在VBA中获得智能感知等。

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

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