明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1728|回复: 8

能帮我解决这3个问题么,

[复制链接]
发表于 2004-4-11 22:01:00 | 显示全部楼层 |阅读模式
呵呵,好久没有来了,单位给任务,要写点东西,这次为了让同事们也用用,打算用vb开发,因为单位用的cad事14.0版本的,虽然程序已经写完了,碰到了一些问题,令我一时想不通,想问一下大家
第一个:AutoCAD14.0版本提供的activex接口支持前期绑定么,这样声明
  1. dim app_acad as new autocad.application
复制代码
好像不对(对于excel是可以这样声明的),但是这样声明对于以后使用该对象的属性和方法都方便多了,因为这样编译器知道该对象的类型了(不再是个普普通通的object),调用该对象的属性和方法时,系统会自动出现补全提示,不用去反复的查帮助(没办法,我一般用lisp,vb不熟啊)
第二个:我用vb的时候,看了一下对象浏览器,打开autocad的库的时候,发现这个库下的类都是IACAD********样子的,当我想这样声明
  1. dim app_acad as new autocad.iacadapplication
复制代码
声明时,也通不过,另外,我想引用一些类的时候,比如
  1. dim app_acad as object
复制代码
  1. dim obj_ss as object
复制代码
  1. set app_acad = createobject("autocad.application")
复制代码
  1. set obj_ss = app_acad.iacadselectionsets.add("ss1")
复制代码
,也会出错,为什么呢,autodesk公司为什么又要以iacad*******来命名类呢,象excel那样不好么
第三个:怎样释放一个数组所占有的内存,该数组不是动态分配存储空间的数组(即开始就已经定好了元素个数的数组),我看了一下帮组,用erase 数组名可以将这样的数组元素的值全部清楚掉,但在内存中还又改变量
先就问这几个问题吧(可能很无知,呵呵),谢谢高手指教。
发表于 2004-4-11 23:31:00 | 显示全部楼层
1、前期绑定只能用


  1. dim app_acad as autocad.application

  2. set app_acad = createobject("autocad.application")       
复制代码




  1. dim app_acad as autocad.application

  2. set app_acad = getobject(,"autocad.application")       
复制代码


2、iacadapplication和iacadselectionsets是一个类而不是一个对象,不能直接应用,只能用:

  1. app_acad.ActiveDocument.SelectionSets
复制代码


引用选择集集合


3、就我所知,VB里好像不需考虑释放一个数组所占有的内存,除非数据量很大
发表于 2004-4-11 23:35:00 | 显示全部楼层
你可以看看帮助里的对象模型,里面有一些范例可以帮助你学习ActiveX接口


其实不难
 楼主| 发表于 2004-4-12 17:26:00 | 显示全部楼层
1、前期绑定只能用
dim app_acad as autocad.application
set app_acad = createobject("autocad.application")
你的声明部分与我的声明部分只差一个new,我用new只是在声明这个对象时为它分配内存,应该没有问题吧,还有,1。就算你这样声明和赋值后,编译时,声明部分可以通过么?我记得好像是不行的;2。你在后面编写程序的时候,app_acad对象的属性及方法会自动补全提示么?如果出现补全提示,是不是都是类似IACAD**********之类的方法和属性,你说这是类,不是属性和方法,那么这个补全提示还有价值么(仍然不能方便我们写程序)?关于你的声明方法,我记得我以前试过了,好像编译不过(版本时14.0的,不是14.1的),现在我机器上没有autocad14.0,明天我在单位上再去看看,有问题在请教谢谢先[code][/code]
发表于 2004-4-12 20:32:00 | 显示全部楼层
自动补全提示只会提示对象的属性(可能是一个对象)而不是一个类名


类和对象是两个不同的概念


app_acad.ActiveDocument.SelectionSets是iacadselectionsets类的一个实例,即对象


建议你看看面向对象的编程方面的书
 楼主| 发表于 2004-4-13 19:40:00 | 显示全部楼层
说太多没有用处,直接点吧,你说的我都知道,其实没有回答到我问题的本质,我想问你,下面这个可以编译通过么?
  1. dim app_obj as autocad.application
  2. set app_obj = createobject("autocad.application")
复制代码
再autocad14下,你用vb试一下,如果你可以通过,我没有什么好说的,为什么不能通过,vb编译器提示说没有该类型(autocad.application)另外,据我所知,自动补全提示可以提供该对象的属性和方法。不光只有属性。你的意思是再vb中,会自动补全提示相应对象的属性,我也希望是这样,这样可以方便我们编程,但是,实际上,cad的activex补全提示的是IAcad****************之类的东西,我想知道为什么会这样(有意义么,不能方便我们写程序)如果你感到厌烦,不必回答,我等斑竹回答,这个问题我也是思考过一段时间了的。
发表于 2004-4-13 19:43:00 | 显示全部楼层
引用里没有吗?把AutoCAD库引用就可以了
发表于 2004-4-13 19:45:00 | 显示全部楼层
如果没有引用,只能用
  1. dim app_obj as object
  2. set app_obj = createobject("autocad.application")
复制代码
发表于 2004-4-13 19:50:00 | 显示全部楼层
  1. dim app_acad as autocad.application

  2. set app_acad = createobject("autocad.application")       
复制代码
绝对可以通过,从R14到2002都试过,除非你引用的库有问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 06:33 , Processed in 0.195405 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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