与 AutoCAD 交互的 VB6 程序不再能够创建或绑定到 ACAD 对象

VB6 program interacting with AutoCAD, is not longer able to create, or bind to the ACAD object

堆栈,

首先,这个网站太棒了,你过去帮助我解决了很多问题;谢谢。

向前看,此程序自 AutoCAD 2000 以来一直存在并在使用中。该软件的当前版本兼容至 ACAD 2017。

我和一个小团队一起工作,不知为何,我的电脑正在为 VB6/AutoCAD 组合而苦苦挣扎;其他开发人员仍在正常工作...

后期绑定用于获取或创建对象;取决于 Acad 是否已经 运行ning...例如

Set oAutoCad = GetObject(, "Autocad.Application")
If err.Number Then
    err.Clear
    Set oAutoCad = CreateObject("Autocad.Application")
    If err.Number Then
        MsgBox UCase$("Unable to launch AutoCAD Session")
        End
    Else
        oAutoCad.Visible = True
    End If
End If

有两种不同的可执行文件(使用相同的绑定技术)与 ACAD 一起工作以完成不同的事情。对于它们两者,软件在 CreateObject 和 GetObject 上均失败,出现“运行 时间错误 429 - ActiveX 组件无法创建对象 。但是,将“.20”添加到调用中允许我创建一个对象,但我仍然无法绑定到现有对象。例如...

Call CreateObject("Autocad.Application.20")

我相信我自己和团队之间的区别在于,我最近不得不在出现一些 'Error Accessing Registry' 问题后重新安装 VB6(在 Windows 更新后立即...很奇怪)。这是最大的区别;其他人都安装了 VB6,从 7 迁移到 10。我是第一个直接安装在 windows 10 机器上的人。

我们最初将 SP6 与 VB6 一起使用,尽管这个问题引起了我的注意。显然,他们仍在更新服务包。因此,计算机最近已更新为 SP6D。我也试过安装 Cumulative Service Pack。

我已经尝试更改 Win 7、Win 8、XP(所有这些)的兼容性设置...我不知道。

我已经 运行 成为管理员

这是一台 64 位机器。

原始的 VB6 MSDN 库已经安装...出于某种原因,SP6 无法正确安装,直到它...就此而言,实际的 VB6 安装最后挂断了。它似乎影响不大,但它必须在后台做某事(或不做)

任何帮助将不胜感激...希望如此。

******* 新信息 ******* 显然,添加 '.20' 只对其中一个 exe 足够好,另一个需要额外的版本号(例如 "Autocad.Application.20.1")

为了让它更有趣,如果我使用“20.1”启动项目,在创建对象时停止代码,等待 autocad 启动,将其设置为可见,打开我需要连接的绘图使用 ACAD UI,然后允许程序继续,GetObject 不会失败...

????

经过似乎永恒的搜索,我在这里找到了答案...

Late binding run-time error in VB6 when creating an object from a .NET assembly

它的要点是这样的...

当使用 CreateObject/GetObject 时,您调用的 Class ID (CLSID) 存储在注册表中...都在 HKEY_CLASSES_ROOT 配置单元和 HKEY_LOCAL_MACHINE 配置单元下在 (Classes)-(AutoCAD.Application)(.X)

似乎 CreateObject 调用使用了 HKEY_CLASSES_ROOT,而 GetObject 可能使用了 HKEY_LOCAL_MACHINE... 我不确定,但这可以解释为什么 CreateObject 调用是工作而不是 GetObject。我的 HKEY_LOCAL_MACHINE 蜂巢以某种方式丢失了 'AutoCAD.Application' 键;可能是由于某种卸载或更新...我不确定。

我所知道的是通过比较配置单元之间的值并将 'CurVer' 值和 'CLSID' 值添加到新创建的 'AutoCAD.Application' 键,程序现在能够在不指定版本的情况下创建和绑定(例如...

CreateObject("AutoCAD.Application")
GetObject(, "AutoCAD.Application")

而不是...

CreateObject("AutoCAD.Application.20.1")
GetObject(, "AutoCAD.Application.20")

甚至更糟

运行-时间错误429:ActiveX组件无法创建对象

再次感谢 Stack。