【问题标题】:VB6 program interacting with AutoCAD, is not longer able to create, or bind to the ACAD objectVB6 程序与 AutoCAD 交互,不再能够创建或绑定到 ACAD 对象
【发布时间】:2017-04-01 02:04:12
【问题描述】:

堆栈,

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

展望未来,该程序自 AutoCAD 2000 以来一直存在并投入使用。该软件的当前版本与 ACAD 2017 兼容。

我与一个小团队一起工作,不知从何而来,我的电脑在 VB6/AutoCAD 组合中遇到了困难;其他开发人员仍在正常工作...

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

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")

我相信我自己和团队之间的区别在于,我最近在一些“访问注册表错误”问题浮出水面后不得不重新安装 VB6(在 Windows 更新后立即......很奇怪)。这是最大的区别。其他人都安装了 VB6 从 7 迁移到 10。我是第一个直接安装在 Windows 10 机器上的人。

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

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

我以管理员身份运行

这是一台 64 位机器。

原始的 VB6 MSDN 库已安装...由于某种原因,SP6 无法正确安装,直到它...就此而言,实际的 VB6 安装最终被挂断。貌似影响不大,但肯定是在后台做某事(或者不做)

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

******* 新信息 ******* 显然,添加 '.20' 仅适用于其中一个 exe,另一个需要和附加版本号(例如“Autocad.Application.20.1”)

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

??????

【问题讨论】:

    标签: windows vb6 activex autocad


    【解决方案1】:

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

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

    它的要点是……

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

    似乎 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。

    【讨论】:

      猜你喜欢
      • 2010-09-25
      • 1970-01-01
      • 2012-03-27
      • 2021-01-08
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多