处理 ObjectId

AutoCAD ActiveX/VBA

 
处理 ObjectId
 
 
 

自 AutoCAD 2008 64 位开始,对象 ID 将由 64 位整数数据类型 (__int64) 表示。在 32 位 VBA 中访问这些值将导致编译错误。作为解决方法,将使用对相应的旧方法名称加上“32”后缀的新方法名称集合(例如 ObjectID32()OwnerID32())。这些方法使用 LONG 数据类型,该数据类型将内部映射到 64 位整数数据类型。

更确切地说,是为 VBA 中需要的每个对象 ID 均内部创建 32 位对象 ID。此 ID 将映射到其 64 位实际 ID,因此,如果 32 位 ID 从 VBA 代码传递回 AutoCAD,则将返回 64 位对象 ID 并在内部用于各种情况。

以下是已转换的 32 位对象 ID 代码样例:

源代码:

Dim splineObj As AcadSpline
Dim objectID As Long
objectID = splineObj.objectID
Dim tempObj As AcadObject
Set tempObj = ThisDrawing.ObjectIdToObject(objectID)

转换代码以实现 64 位兼容性:

Dim splineObj As AcadSpline
Dim objectID As Long
objectID = splineObj.objectID32
Dim tempObj As AcadObject
Set tempObj = ThisDrawing.ObjectIdToObject32(objectID)

VBA 应用程序也可以使用对象句柄代替对象 ID。以下样例显示了如何使用句柄代替对象 ID:

源代码:

Dim splineObj As AcadSpline
Dim objectID As Long
objectID = splineObj.objectID
Dim tempObj As AcadObject
Set tempObj = ThisDrawing.ObjectIdToObject(objectID)

转换代码以实现 64 位兼容性:

Dim splineObj As AcadSpline
Dim objectHandle As String
objectHandle = splineObj.Handle
Dim tempObj As AcadObject
Set tempObj = ThisDrawing.HandleToObject(objectHandle)
注意:在 AutoCAD 的后续版本中将不支持 VBA。VBA 开发人员应准备将 VBA 代码转换为 VB.Net。