gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:34:44 28 4
gpt4 key购买 nike

我工作的软件公司为学校构建软件,因此我们的客户端计算机通常被锁定,以至于我们几乎不可能在上面安装任何东西。

我们的旧系统主要基于(非常大的)MS Access 项目,因此它通过从本地文件夹运行来解决 Access 问题。

我的任务是将某些系统重新开发为 c# .NET - 但是在过渡阶段能够让 Access 项目启动 .NET 东西会很好。

我今天玩了几个小时的 com 互操作,但据我所知,使这些工作正常进行的唯一方法是使用 RegAsm.exe 注册它们——不幸的是,这在客户端环境中不是一个选项。

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

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

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

马龙

最佳答案

您可以在 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

这绕过了使用注册表的需要。不利的一面是您必须对对象使用后期绑定(bind)。

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

关于c# - 不使用 regasm.exe 的 VB6 中的 .NET 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2378542/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com