明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 10496|回复: 18

VB引用CAD类库

[复制链接]
发表于 2010-6-3 23:46:00 | 显示全部楼层 |阅读模式

做了一个CAD批处理程序,可以让用户选择哪CAD版本来做批处理,目前程序引用的是AutoCAD 2005 Type Library,如果选择非2005版本,在运行过程中会出错。

 

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2018-10-8 16:09:22 | 显示全部楼层
新鲜8 发表于 2018-10-5 10:20
能说的详细点吗怎么做的3个dll文件吗

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

源代码:http://bbs.mjtd.com/thread-176758-1-1.html

http://bbs.mjtd.com/thread-176759-1-1.html
发表于 2018-10-5 10:20:31 | 显示全部楼层
pmq 发表于 2010-7-4 14:38
我的“测量成图剖面计算”也是这样,做三个DLL,分别引用2006,2009,2011
Public Sub CadVer()   ...

能说的详细点吗怎么做的3个dll文件吗
发表于 2018-5-16 17:24:37 | 显示全部楼层
guohq 发表于 2010-7-3 19:53
目前我已经试验成功,做三个DLL,分别引用2002 ,2006 ,2009Type Library,然后新建一个工程,此工程得引用刚 ...

那是不是得装多个版本的cad?
发表于 2010-6-4 11:15:00 | 显示全部楼层
后期绑定类型库
 楼主| 发表于 2010-6-4 11:41:00 | 显示全部楼层
请问能介绍一下怎么绑定吗?
发表于 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") 是依赖于版本的。
 楼主| 发表于 2010-6-7 09:05:00 | 显示全部楼层

这种方法做起来没那么理想,因为我想指定启动某个版本,即使在application后面加了版本号,也不方便控制。

用CreateObject(AutoCAD.Application)加版本号不行。

比如 我当前引用了2008的类库,生成exe文件后,复制到其它电脑上,而目标电脑上只装了2005,通过shell函数启动CAD2005,当程序运行到getobject时,便会出错。

 

 楼主| 发表于 2010-6-7 17:11:00 | 显示全部楼层

假如系统已经安装了AutoCAD2004 2005 2006 ,通过CreateObject("autocad.application.16.1")不一定能启动CAD2005,而是启动了系统最后一次启动的版本,怎样能控制CAD启动的版本呢?

发表于 2010-6-9 15:48:00 | 显示全部楼层

很感谢楼主分享,多谢了.

 楼主| 发表于 2010-7-3 19:53:00 | 显示全部楼层
目前我已经试验成功,做三个DLL,分别引用2002 ,2006 ,2009Type Library,然后新建一个工程,此工程得引用刚才生成的三个DLL,这样就不会出错版本间的冲突,
发表于 2010-7-4 14:38:00 | 显示全部楼层

我的“测量成图剖面计算”也是这样,做三个DLL,分别引用2006,2009,2011

Public Sub CadVer()
    strAcadVersion = Application.Version
    strAcadVersion = Left(strAcadVersion, 4)
    Select Case strAcadVersion
    Case "16.0", "16.1", "16.2"
        Set SurA = CreateObject("SurFun200456.Class1")
    Case "17.0", "17.1", "17.2"
        Set SurA = CreateObject("SurFun200789.Class1")
    Case "18.0", "18.1", "18.2"
        Set SurA = CreateObject("SurFun20101.Class1")
    Case Else
    End Select
End Sub
根据CAD版本调用相应的DLL文件。

 

http://pmq.ys168.com/

发表于 2015-8-7 23:12:21 | 显示全部楼层
做三个DLL,分别引用2002 ,2006 ,2009Type Library,,,能不能说的更详细点吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 06:28 , Processed in 0.198153 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表