VB6 如何托管 .net 2.0
本文关键字:net 何托管 VB6 | 更新日期: 2023-09-27 18:34:12
我们想从VB6调用一些.net程序集。我知道我们可以通过 Regasm 命令将 .net 程序集注册到 COM,然后从 VB6 调用它。但现在我们想在 VB6 中托管 CLR 2.0。
我知道我们可以调用CorRuntimeHost类来托管CLR。但MSDN表示,这是过时的。在谷歌搜索了几天后,我发现很多人使用CorBindToRuntimeEx来托管CLR。但所有这些样本都基于 C/C++。抱歉,我没有找到任何使用 VB6 的样本。
那么有谁知道如何使用VB6来托管.net框架2.0。除了CorRuntimeHost类,还有没有其他方法可以在VB6中托管.net框架?
我终于找到了答案。我把它贴在这里,因为也许它对其他人有用。
您可以在 excel VBA 中引用 mscorlib.tlb,然后:
Dim ap as ApplicationDomain, apm As mscorlib.AppDomainManager, result as object
Set apm = New mscorlib.AppDomainManager
Set m_domain = apm.CreateDomain("kissingerDomain", Nothing, Nothing)
set object = m_domain.CreateInstanceFrom(DLL_Path, typeName).Unwrap
现在可以调用对象方法了,哈哈。
CLR 主机必须是非托管的本机应用程序。不能使用 VB6 直接承载 CLR。
实现此目的的唯一方法是编写一个公开__declspec C 函数的 C++ DLL,并从 VB6 应用程序中使用这些函数。有人为FoxPro做了这件事,所以有一些希望。
即使假设它运行良好(我不知道两个"部分"(VB6 VM 和主机)中的 COM 层是否会很好地协同工作),您仍然必须在C++中执行此操作。所以。。听听约翰·桑德斯的评论。不要那样做,选择另一条路。
Private Sub LoadLib()
Dim unknown As IUnknown
Dim domain As AppDomain
Dim handle As ObjectHandle
Dim path As String
On Local Error GoTo OOPS
path = GetDLLPath()
Set m_host = New CorRuntimeHost
With m_host
.Start
.GetDefaultDomain unknown
End With
Set domain = unknown
Set handle = domain.CreateInstanceFrom(path, "STHRest.CXlService")
Set m_lib = handle.Unwrap
OOPS:
If Err.Number <> 0 Then
m_err = Err.Description
Call RemoveCLR
End If
On Local Error GoTo 0
Exit Sub
结束子