Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel DNA-我可以避免一起做regasm吗?_Excel_Vba_Regasm_Xll_Excel Dna - Fatal编程技术网

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

Excel DNA-我可以避免一起做regasm吗?,excel,vba,regasm,xll,excel-dna,Excel,Vba,Regasm,Xll,Excel Dna,我正在尝试评估在我的excel加载项中使用它。我使用C#函数(.NET4.0),并希望从Excel调用这些函数。我感兴趣的原因是,我的加载项的用户是非管理员,因此如果我能找到一个解决方案,不在我的.NET dll上执行regasm,让我的加载项工作,这将是一个突破 我理解,如果它像一个工作表函数(具有简单的返回类型和参数),如:private string Add(inta,double b) 我可以使用excel dna轻松地包装和暴露它们。另外,我知道,我也可以使用Application.R

我正在尝试评估在我的excel加载项中使用它。我使用C#函数(.NET4.0),并希望从Excel调用这些函数。我感兴趣的原因是,我的加载项的用户是非管理员,因此如果我能找到一个解决方案,不在我的.NET dll上执行regasm,让我的加载项工作,这将是一个突破

我理解,如果它像一个工作表函数(具有简单的返回类型和参数),如:
private string Add(inta,double b)
我可以使用excel dna轻松地包装和暴露它们。另外,我知道,我也可以使用Application.Run从VBA调用这些简单函数

但是,如果API中涉及复杂类型,并且希望从VBA使用它,那么是否需要重新命名该程序集和类型?例如:

private MyType AddLogic (myType1 A,  myType2 B) 
或者在Excel DNA中是否有任何方法可以在VBA中使用此类函数,而无需任何regasm或regsvr32

谢谢
Mani

您指的是Excel DNA中内置的COM服务器支持。有几个选项,所有这些选项都适用于没有管理员权限的用户

  • 您可以在运行时在AutoOpen中注册COM类型-然后它们将从VBA后期绑定可用(因此VBA中调用这些COM类型的所有内容都将是“变量”,您将无法获得intellisense)
  • 您可以使用.xll作为COM服务器,向regsvr32注册COM类型。Excel DNA在注册表的HKEY_LOCAL_用户部分中注册其类型,用户可以随时向该部分写入。然后,即使未加载.xll加载项,使用COM公开类型的VBA项目也将运行
  • 要为COM公开的类型添加类型库信息,您必须进行regsvr32注册,这同样可以在没有管理员权限的情况下工作,然后在VBA中获得intellisense等
在所有这些情况下,您都不会使用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.xll上的regsvr32不需要管理员权限,因为它只向HKLU创建注册表项。因为,我知道通常在本地dll上运行regsvr32时,它确实需要管理员权限。这个Mani的情况如何?我也有类似的情况