.net CLR 在 VBA (Access) 中的后期绑定
Posted
技术标签:
【中文标题】.net CLR 在 VBA (Access) 中的后期绑定【英文标题】:Late binding of .net CLR in 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 不是托管代码,则有可能!
【参考方案1】:
我相信您可能需要先注册 typelib(无法确认 ATM,因为我在寻找类名之前使用了 regtlibv12.exe 注册它)。类名似乎是“CLRMetaData.CorRunTimeHost”。
【讨论】:
欣赏类名 - 不幸的是 CreateObject 仍然不起作用 - 我非常同意并怀疑你是正确的 - 问题是这样的对象需要 regasm /codebase 才能工作。当然,避免在锁定的机器上注册任何东西是这篇文章的主要原因。有趣的是,Access VBA 中的引用集有效,但允许 CreateObject 无效。以上是关于.net CLR 在 VBA (Access) 中的后期绑定的主要内容,如果未能解决你的问题,请参考以下文章
将基于 Access 的 VBA 工具迁移到独立的 .Net 应用程序会提高性能吗?
将 MS Access VBA 应用程序转换为 .NET Visual Studio 项目
如何在 Microsoft Access 中通过 VBA 设置 INSERT SQL 查询的参数值?