我们想打电话给一些来自.net的VB6大会。我知道我们可以通过.net命令将VB6程序集注册到COM,然后从VB6调用它。但是现在我们想要在VB6中托管CLR2.0。
我知道我们可以调用CorRuntimeHost类来承载CLR。但MSDN表示,这是显而易见的。在谷歌搜索了几天之后,我发现很多人使用CorBindToRuntimeEx来托管CLR。但是这些样本都是基于C/C++的。对不起,我没有找到任何使用VB6的样本。
也有人知道如何使用VB6托管.net框架2.0。除了CorRuntimeHost类之外,还有其他方法在VB6中托管.net框架吗?
发布于 2015-12-04 23:40:05
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结束子对象
发布于 2015-01-09 21:42:35
我终于找到了答案。我把它贴在这里,因为它可能是别人用的。
您可以在excel中重新创建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现在您可以调用object方法了,哈哈。
发布于 2014-12-17 09:13:44
CLR主机必须是非托管的本机应用程序。不可能直接使用VB6托管CLR。
唯一使之成为可能的方法是编写一个公开C++ C函数的__declspec DLL,并从VB6应用程序中使用这些函数。有人为FoxPro做了这件事,所以有一些希望。
即使假设它运行良好(我不知道两个“部分”( VB6、VM和主机)中的COM层是否能很好地一起运行),您仍然必须在C++中这样做。所以..。听约翰桑德斯的评论。别那么做,选择另一条路。
https://stackoverflow.com/questions/27466215
复制相似问题