在AutoCADVlisp和VBA之间传递数据.doc
上传人:sy****28 上传时间:2024-09-14 格式:DOC 页数:3 大小:38KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

在AutoCADVlisp和VBA之间传递数据.doc

在AutoCADVlisp和VBA之间传递数据.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

在AutoCADVlisp和VBA之间传递数据LDATA,顾名思义是AutoDesk窝藏私心,专门给lisp留用的数据。当vlax-ldata-put第一个参数为指定全局词典的字符串时,VBA可以通过命名词典“看到”数据,当第一个参数为图元对象时,VBA只能判断出实体具有扩展词典,但“看不到”数据,所以目前还只能用vlax-ldata-**族函数处理LDATA,VBA存取不行。你是想要在Vlisp和VBA之间传递数据吧?可以找点别的办法,在DWG内部,Vlisp、VBA、ARX之间可以传递多达2GB数据。LDATA保存在DWG中是无疑的,只是地点没有“暴露”给VBA,所以VBA无法存取,这和其他一些第三方程序自定对象数据不能存取是一个道理,类似的东西还有一些,这个LDATA对于使用VL和VBA混合编程并需要在两者之间传递数据的人有些误导作用。应该让Vlisp和VBA各做其擅长的事情而无需论其长短,二者需要传递数据时用Dictionary和Xrecord更为舒畅自然。Xrecord是一个任意数据的容器,它提供了比xdata更灵活的附加数据的办法,Xrecord能包含2GB的任意数据,特别适合不同开发语言之间传递数据,有用的保留在DWG,临时的完事就删除。有时VBA和Excel交互大量数据,完成计算,生成图形时Vlisp又方便一些,VBa把数据传递过去,用Vlisp干干净净地写,反之亦然。**1-VBA传出''设置指定词典扩展记录'PublicFunctionDhvb_SetXrecord(objDictAsAcadDictionary,_XRecordNameAsString,_XRecordDataAsVariant)_AsAcadXRecordDimobjXRecordAsAcadXRecordDimXRecordTypeAsVariantDimiAsLong'检察对象词典是否有该名扩展记录,如果已经存在则删除OnErrorResumeNextSetobjXRecord=objDict.GetObject(XRecordName)IfNotobjXRecordIsNothingThenobjDict.RemoveXRecordNameEndIfOnErrorGoTo0'建立扩展记录数据ReDimXRecordType(0ToUBound(XRecordData))AsIntegerFori=0ToUBound(XRecordData)SelectCaseVarType(XRecordData(i))CasevbInteger,vbLongXRecordType(i)=90'整数组码=90CasevbSingle,vbDoubleXRecordType(i)=40'实数组码=40CasevbStringXRecordType(i)=2'字符组码=2EndSelectNext'添加扩展记录到对象词典SetobjXRecord=objDict.AddXRecord(XRecordName)objXRecord.SetXRecordDataXRecordType,XRecordData'返回扩展记录对象SetDhvb_SetXrecord=objXRecordEndFunction**2-Vlisp读取;;;;;;读取指定词典扩展记录,返回数据表;;;;(defunDhvl_GetXrecord(objDictXRedName/objXRedXRedTypeXRedDataTypeListDataListx)(setqobjXRed(vla-GetObjectobjDictXRedName))(vla-GetXRecordDataobjXRed'XRedType'XRedData)(setqXRedType(vlax-safearray->listXRedType)XRedData(vlax-safearray->listXRedData))(foreachxXRedType(setqTypeList(appendTypeList(listx))))(foreachxXRedData(setqDataList(appendDataList(list(vlax-variant-valuex)))))(listTypeListDataList))