Taoyimaier 发表于 2004-4-11 22:01:00

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

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

雪山飞狐_lzh 发表于 2004-4-11 23:31:00

1、前期绑定只能用



dim app_acad as autocad.application


set app_acad = createobject("autocad.application")       





dim app_acad as autocad.application


set app_acad = getobject(,"autocad.application")       


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


app_acad.ActiveDocument.SelectionSets


引用选择集集合


3、就我所知,VB里好像不需考虑释放一个数组所占有的内存,除非数据量很大

雪山飞狐_lzh 发表于 2004-4-11 23:35:00

你可以看看帮助里的对象模型,里面有一些范例可以帮助你学习ActiveX接口


其实不难

Taoyimaier 发表于 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,明天我在单位上再去看看,有问题在请教谢谢先

雪山飞狐_lzh 发表于 2004-4-12 20:32:00

自动补全提示只会提示对象的属性(可能是一个对象)而不是一个类名


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


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


建议你看看面向对象的编程方面的书

Taoyimaier 发表于 2004-4-13 19:40:00

说太多没有用处,直接点吧,你说的我都知道,其实没有回答到我问题的本质,我想问你,下面这个可以编译通过么?dim app_obj as autocad.application
set app_obj = createobject("autocad.application")再autocad14下,你用vb试一下,如果你可以通过,我没有什么好说的,为什么不能通过,vb编译器提示说没有该类型(autocad.application)另外,据我所知,自动补全提示可以提供该对象的属性和方法。不光只有属性。你的意思是再vb中,会自动补全提示相应对象的属性,我也希望是这样,这样可以方便我们编程,但是,实际上,cad的activex补全提示的是IAcad****************之类的东西,我想知道为什么会这样(有意义么,不能方便我们写程序)如果你感到厌烦,不必回答,我等斑竹回答,这个问题我也是思考过一段时间了的。

雪山飞狐_lzh 发表于 2004-4-13 19:43:00

引用里没有吗?把AutoCAD库引用就可以了

雪山飞狐_lzh 发表于 2004-4-13 19:45:00

如果没有引用,只能用dim app_obj as object
set app_obj = createobject("autocad.application")

雪山飞狐_lzh 发表于 2004-4-13 19:50:00

dim app_acad as autocad.application



set app_acad = createobject("autocad.application")       

绝对可以通过,从R14到2002都试过,除非你引用的库有问题
页: [1]
查看完整版本: 能帮我解决这3个问题么,