|
在AutoCAD Vlisp和VBA之间传递数据-AutoCAD,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传出
' '设置指定词典扩展记录 ' Public Function Dhvb_SetXrecord(objDict As AcadDictionary, _ XRecordName As String, _ XRecordData As Variant) _ As AcadXRecord
Dim objXRecord As AcadXRecord Dim XRecordType As Variant Dim i As Long
'检察对象词典是否有该名扩展记录,如果已经存在则删除 On Error Resume Next Set objXRecord = objDict.GetObject(XRecordName) If Not objXRecord Is Nothing Then objDict.Remove XRecordName End If On Error GoTo 0
'建立扩展记录数据 ReDim XRecordType(0 To UBound(XRecordData)) As Integer For i = 0 To UBound(XRecordData)
Select Case VarType(XRecordData(i))
Case vbInteger, vbLong XRecordType(i) = 90'整数组码=90
Case vbSingle, vbDouble XRecordType(i) = 40'实数组码=40
Case vbString XRecordType(i) = 2'字符组码=2
End Select
Next
'添加扩展记录到对象词典 Set objXRecord = objDict.AddXRecord(XRecordName) objXRecord.SetXRecordData XRecordType, XRecordData
'返回扩展记录对象 Set Dhvb_SetXrecord = objXRecord
End Function
** 2-Vlisp读取
|
| • 数控设备日常维护保养-日常维护 |
| • 数控铣床的加工工艺范围-数控铣 |
| • 数控设备的干扰问题-干扰 |
| • FANUC系统键盘定义-FANUC |
| • 数控编程高手的八大必备条件-数控编程 |
| • 基于精密测量的复杂零件的快速反求-测量 |
|
|
|