栈,
首先,这个网站太棒了,过去你帮我解决了很多问题;感谢。
展望未来,自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不会失败...
????
答案 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。