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

时间:2016-11-17 13:39:57

标签: windows vb6 activex autocad

栈,

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

展望未来,自AutoCAD 2000以来,该程序已经存在并正在使用中。该软件的当前版本与ACAD 2017兼容。

我和一个小团队一起工作,我的PC一直在努力使用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机器上的人。

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

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

我以管理员身份运行

这是一台64位机器。

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

任何帮助都将非常感谢...这是希望。

*******新信息******* 显然,添加'.20'对于其中一个exes来说已经足够了,另一个需要和额外的版本号(例如“Autocad.Application.20.1”)

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

????

1 个答案:

答案 0 :(得分:0)

在看似永恒的搜索之后,我在这里找到了答案......

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

它的主旨是......

当使用CreateObject / GetObject时,您的调用存储在注册表中的类ID(CLSID)...在HKEY_CLASSES_ROOT配置单元下和(Classes)下的HKEY_LOCAL_MACHINE配置单元 - (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。