【发布时间】:2011-05-11 05:02:36
【问题描述】:
按照Execute .NET 3.0 code from Office 2003此处发布的步骤,我已经成功地运行了我自己的 .Net 代码
有没有一种方法可以使用标准的 .Net 库而无需编写包装器?这样我们就可以避免在客户端机器上注册并安装自定义 DLL 到 GAC 中。
我已经在 C:\Windows\Microsof.NET\Framework 文件夹中找到了 tlb 文件,并且能够添加对 mscorlib.dll 的引用。查看RijndaelManaged 的文档,这个类似乎是COM 可见的。
我能够创建一个实例,但一旦我尝试使用它,就会出现错误(例如“类型不匹配”)。
Sub Macro1()
Dim aesImplementation As New RijndaelManaged
Set key = aesImplementation.GenerateKey()
Set iv = aesImplementation.GenerateIV()
End Sub
我愿意接受你提供的任何技巧!
【问题讨论】:
-
我没有答案:在没有包装器的情况下使用 .NET,但如果您是 VBA 新手,您需要知道将某些内容声明为“As New”实际上并不会实例化任何内容那时就像在.NET中一样。我不清楚您的错误是在实例化还是在“设置”上引发的。 (我假设您已将“键”变量声明为正确的类型等)请参阅stackoverflow.com/questions/2478097/…
-
太疯狂了,如果没有实例化新对象,为什么还要将 As New 作为有效语法?!在这种情况下,它似乎确实创建了一个实例,但我至少会记得“As New”不是最佳实践。我没有明确声明关键对象的原因是因为如果我这样做,我会得到“无法分配给数组”错误。显然,当您尝试分配给不同类型的数组时会发生此错误。
-
这不是很多工作来节省一些工作吗?我的意思是,如果您的用户允许您运行宏,为什么不运行实际的 .NET 应用程序呢? .NET 中的 Office 互操作性似乎相当不错,因此您可以同等或更好地操作文档!
-
Dim ... As New确实创建了一个新对象,它只是根据需要在引用它的地方而不是在声明它的地方这样做。一个微妙的区别,与这个特定的代码示例完全无关。 -
至于分配给一个数组,在 VBA 中你不会使用 'Set',只是普通的分配。但我不知道将 VBA 变体分配给 .NET 字节数组是否可行。