VB6中的.NET对象不使用regasm.exe?

Mar*_*lon 3 c# vb6 com ms-access interop

我正在为学校建立软件的软件公司,所以我们的客户端机器通常被锁定,这使得我们几乎不可能在其上安装任何东西.

我们的旧系统主要基于(非常大的)MS Access项目,因此只需从本地文件夹运行即可解决访问问题.

我已经被赋予了将一些系统重新开发到c#.NET的任务 - 但是在过渡阶段能够让访问项目解开.NET事件会很好.

我今天玩了几个小时的com interops但是afaik使这些工作的唯一方法是用RegAsm.exe注册它们 - 不幸的是,这不是客户端环境中的一个选项.

我已经尝试过GetObject/CreateObject但在引用dll或tlb文件时都不起作用,还有其他方法可以实现吗?

理想的解决方案是将com interop dll放在与Access项目相同的目录中.

是的,在有人说之前,我知道MS Access是邪恶的,只适用于非常小的项目 - 但我4个月前才来到这里......

马龙

Foo*_*ole 6

您可以在Access中托管CLR:

添加对mscoree的引用(可能是C:\ WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscoree.tlb)

Sub Main()
    Dim CORHost As New mscoree.CorRuntimeHost
    Dim Domain As Object
    Dim AssemblyFilename As String
    Dim Classname As String
    Dim Result As Object

    AssemblyFilename = "mscorlib"
    Classname = "System.Collections.ArrayList"

    CORHost.Start
    CORHost.CurrentDomain Domain
    Set Result = Domain.CreateInstance(AssemblyFilename, Classname).Unwrap()

    Result.Add "test"
    MsgBox Result.Count
End Sub
Run Code Online (Sandbox Code Playgroud)

这绕过了使用注册表的需要.这方面的缺点是您必须使用后期绑定您的对象.

您还可以添加对mscorlib.tlb的引用,以获取AppDomain类和其他类的信息.


shf*_*301 5

只要您的客户端系统是 Windows XP 或更高版本,您就可以选择使用免注册 COM。这取代了在带有 XML 配置清单文件的系统注册表中使用 regasm(或本机 COM 服务器的 regsvr32)注册 COM 组件的需要。

有了这个,您仍然可以使用标准的 CreateObject 调用来创建您的对象。