【问题标题】:Late binding of .net CLR in VBA (Access).net CLR 在 VBA (Access) 中的后期绑定
【发布时间】:2015-05-03 23:35:07
【问题描述】:

在下面的文章中,它展示了如何使用 VBA,创建 CLR 的实例,从而调用/使用/使用 .net COM 对象,而无需注册此类对象。

Side-By-Side COM Interop with C# and VBA

我希望替换此代码:

Dim Host As mscoree.CorRuntimeHost
Set Host = New CorRuntimeHost

Set Host = createObject("mscoree.CorRunTimeHost")

我找不到“类”名称。

也就是说,我想后期绑定CLR。有谁知道是否可以使用 VBA CreateObject() 来代替从 VBA 对上述 mscore 的硬引用

VBA->工具中设置的“参考”是

C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscoree.tlb

实际上,我希望通过 CreateObject() 后期绑定使用 .net CLR

【问题讨论】:

  • 类名不是CorRuntimeHost吗? CreateObject("mscoree.CorRunTimeHost") 是否将Host 设置为Nothing
  • 我的猜测是,如果不在注册表中添加对 typelib 的 COM 引用,就无法完成。如果我打电话给Debug.Print TypeName(Host),它会报告Unknown
  • 您对此的一个很好的破解-我相信您是正确的-注册表中没有类型库-我不能后期绑定。但是,如果 mscoree.tlb 不是托管代码,则有可能!

标签: .net vba ms-access


【解决方案1】:

我相信您可能需要先注册 typelib(无法确认 ATM,因为我在寻找类名之前使用了 regtlibv12.exe 注册它)。类名似乎是“CLRMetaData.CorRunTimeHost”。

【讨论】:

  • 欣赏类名 - 不幸的是 CreateObject 仍然不起作用 - 我非常同意并怀疑你是正确的 - 问题是这样的对象需要 regasm /codebase 才能工作。当然,避免在锁定的机器上注册任何东西是这篇文章的主要原因。有趣的是,Access VBA 中的引用集有效,但允许 CreateObject 无效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
相关资源
最近更新 更多