乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 254|回复: 12

VB引用CAD类库

[复制链接]

75

主题

306

帖子

10

银币

中流砥柱

Rank: 25

铜币
606
发表于 2010-6-3 23:46:00 | 显示全部楼层 |阅读模式
做了一个CAD批处理程序,可以让用户选择哪CAD版本来做批处理,目前程序引用的是 2005 Type Library,如果选择非2005版本,在运行过程中会出错。

请问如果在程序中通过代码方式来引用某个类库,这样引用的类库能各启动的CAD版本相匹配,而不要通过菜单方式来引用;


                               
登录/注册后可看大图


回复

使用道具 举报

pmq

14

主题

61

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
117
发表于 2018-10-8 16:09:00 | 显示全部楼层

就是在引用CAD类型库时分别引用CAD2006,CAD2009,CAD2012
源代码:

回复

使用道具 举报

14

主题

52

帖子

8

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
109
发表于 2018-10-5 10:20:00 | 显示全部楼层

能说的详细点吗怎么做的3个dll文件吗
回复

使用道具 举报

0

主题

2

帖子

2

银币

初来乍到

Rank: 1

铜币
2
发表于 2018-5-16 17:24:00 | 显示全部楼层

那是不是得装多个版本的cad?
回复

使用道具 举报

1

主题

113

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
117
发表于 2010-6-4 11:15:00 | 显示全部楼层
后期绑定类型库
回复

使用道具 举报

75

主题

306

帖子

10

银币

中流砥柱

Rank: 25

铜币
606
发表于 2010-6-4 11:41:00 | 显示全部楼层
请问能介绍一下怎么绑定吗?
回复

使用道具 举报

1

主题

113

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
117
发表于 2010-6-4 14:05:00 | 显示全部楼层
1、如何在 VB 中连接 AutoCAD。
启动 VB ,引用 AutoCAD 类型库。操作步骤:从“工程”菜单中选择“引用”选项,启动“引用”对话框。在“引用”对话框中,选择 AutoCAD 类型库,然后单击“确定”。
定义模块级变量 AutoCAD 应用程序 (acadApp) 和当前的文档 (acadDoc)。
如果 AutoCAD 正在运行,使用 GetObject 函数将检索 AutoCAD Application 对象。如果 AutoCAD 没有运行,使用 CreateObject 函数试图创建一个 AutoCAD Application 对象。如果创建成功,会启动 AutoCAD;如果失败,则会发生错误。
同时运行多个 AutoCAD 任务时,GetObject 函数会返回 Windows 运行对象表中的第一个 AutoCAD 实例。
要显示 AutoCAD 图形窗口,需要将 AutoCAD 应用程序的 Visible 特性设置为 TRUE。
使用 acadDoc 变量引用当前的 AutoCAD 图形。
示例:
Dim acadApp As AcadApplication
Dim acadDoc as AcadDocument
Sub ConnectToAcad()
On Error Resume Next
Set acadApp = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set acadApp = CreateObject("AutoCAD.Application")
If Err Then End
End If
acadApp.Visible = True
Set acadDoc = acadApp.ActiveDocument
End Sub
2、如何使 VB 开发的程序不依赖于 AutoCAD 的版本。
启动 VB ,定义模块级变量 AutoCAD 应用程序 (acadApp) 和当前的文档 (acadDoc)。
如果 AutoCAD 正在运行,使用 GetObject 函数将检索 AutoCAD Application 对象。如果 AutoCAD 没有运行,使用 CreateObject 函数试图创建一个 AutoCAD Application 对象。如果创建成功,会启动 AutoCAD;如果失败,则会发生错误。
同时运行多个 AutoCAD 任务时,GetObject 函数会返回 Windows 运行对象表中的第一个 AutoCAD 实例。
要显示 AutoCAD 图形窗口,需要将 AutoCAD 应用程序的 Visible 特性设置为 TRUE。
使用 acadDoc 变量引用当前的 AutoCAD 图形。
示例:
Dim acadApp As Object
Dim acadDoc as Object
Sub ConnectToAcad()
On Error Resume Next
Set acadApp = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set acadApp = CreateObject("AutoCAD.Application")
If Err Then End
End If
acadApp.Visible = True
Set acadDoc = acadApp.ActiveDocument
End Sub
与第一个问题相比较,可以看出,不引用具体的类型库以及使用通用的对象类型就可以达到通用性。
3、前期绑定和后期绑定
要创建一个使用前期绑定方式的对象变量,也就是说,在程序编译时就完成绑定,则对象变量在声明时应指定类 ID,如:Dim acadApp As AcadApplication。
使用 As Object 子句声明对象变量,可以创建一个能包含任何类型对象引用的变量。不过,该变量访问对象是后期绑定的,也就是说,绑定在程序运行时才进行,如:Dim acadApp As Object。
前期绑定的变量引用可以提供更好的性能,但该变量只能存放声明中所指定的类的引用。
而后期绑定的变量引用可以提供更好的通用性。
4、依赖于版本和独立于版本
如果 CreateObject 或 GetObject 函数使用的 ProgID 没有附加版本号,那么是独立于版本的,否则是依赖于版本的。例如,如果使用的是 CreateObject,则 CreateObject ("AutoCAD.Application") 是独立于版本的,而 CreateObject ("AutoCAD.Application.15") 是依赖于版本的。
回复

使用道具 举报

75

主题

306

帖子

10

银币

中流砥柱

Rank: 25

铜币
606
发表于 2010-6-7 09:05:00 | 显示全部楼层
这种方法做起来没那么理想,因为我想指定启动某个版本,即使在application后面加了版本号,也不方便控制。
用CreateObject(AutoCAD.Application)加版本号不行。
比如 我当前引用了2008的类库,生成exe文件后,复制到其它电脑上,而目标电脑上只装了2005,通过shell函数启动CAD2005,当程序运行到getobject时,便会出错。

回复

使用道具 举报

75

主题

306

帖子

10

银币

中流砥柱

Rank: 25

铜币
606
发表于 2010-6-7 17:11:00 | 显示全部楼层
假如系统已经安装了AutoCAD2004 2005 2006 ,通过CreateObject("autocad.application.16.1")不一定能启动CAD2005,而是启动了系统最后一次启动的版本,怎样能控制CAD启动的版本呢?
回复

使用道具 举报

0

主题

20

帖子

6

银币

初来乍到

Rank: 1

铜币
20
发表于 2010-6-9 15:48:00 | 显示全部楼层
很感谢楼主分享,多谢了.
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 05:42 , Processed in 0.234895 second(s), 72 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表