jurgen wuytack 发表于 2022-7-6 15:03:13

ObjectID返回错误64位a

我们正在使用Autocad2009。我的处理器只有64位,当我们使用objectID时,vba中有一个问题。
谁能帮我解决这个问题。我在网上搜索了一下,发现64位处理器返回的值比32位处理器长?

ReMark 发表于 2022-7-6 15:16:25

你能把你收到的错误信息的确切措辞贴出来吗?非常感谢。

SEANT 发表于 2022-7-6 15:20:57

我没有办法用64位测试这个方法,但值得一试。附加的示例只是通过操作通过ObjectId返回的引用来更改对象的颜色。
 
Sub objIDTest()
Dim ent As AcadEntity
Dim varPkPt As Variant
Dim entTransfer As AcadEntity
Dim strObjId As String
With ThisDrawing
   .Utility.GetEntity ent, varPkPt, "Select and entity:"
   strObjId = ThisDrawing.Utility.GetObjectIdString(ent, False)
   Set entTransfer = .ObjectIdToObject(CLng(.Utility.DistanceToReal(strObjId, acDecimal)))
   entTransfer.color = acRed
End With
End Sub

jurgen wuytack 发表于 2022-7-6 15:33:02

编译错误
函数或接口标记为受限,或函数使用Visual Basic不支持的自动化类型

SEANT 发表于 2022-7-6 15:36:55

哪一行代码产生了错误,在哪一版本的AutoCad中(64位和/或32位)?

jurgen wuytack 发表于 2022-7-6 15:42:20

如果此图纸。纸张空间。项目(T1)。ObjectName=“AcDbBlockReference”然后
设置Kader=ThisDrawing。纸张空间。项目(T1)
BlokNaam=UCase(Kader.Name)
如果BlokNaam=“A3ELEK”,则
kaderID(0,volgnr)=Kader。ObjectID(deze代码geeft错误)
kaderID(1,volgnr)=Blad
VarAttributes=Kader。获取属性
kaderID(2,volgnr)=VarAttributes(1)。文本字符串
kaderID(3,volgnr)=VarAttributes(2)。文本字符串
volgnr=volgnr+1
blnr=Val(Blad)
如果blnr>max,则max=blnr
如果结束
如果结束

SEANT 发表于 2022-7-6 15:49:48

不幸的是,你的情况超出了我的能力范围。我没有64位版本的AutoCAD来测试任何代码,也没有完全理解用荷兰语编写的代码段的能力。
 
看起来您正在将ObjectID存储在某种形式的数据库中。我的代码示例的基础是,您可以将ObjectID存储为字符串,而不是长数据类型。棘手的部分(我无法测试的部分)是32位和64位使用该字符串返回对象的能力。

jurgen wuytack 发表于 2022-7-6 16:01:10

肖恩
我已将nog the objectid更改为object32(仅在64位版本中可用)
对于Object32代码,它似乎可以工作。我们所知道的唯一区别是,该例程比32位版本慢得多(运行大约需要20秒)(例程在0.5秒内完成)
谢谢你的努力

SEANT 发表于 2022-7-6 16:07:02

我怀疑您会看到由于AutoCAD 64位使用的“进程外”设置,所有VBA例程在64位上运行较慢。
 
很高兴看到您至少有一些可用的性能级别。
 
需要检查的一件事(为什么我倾向于基于“字符串”的识别方法)是向后兼容性,即处理32位机器上64位版本生成的值。
页: [1]
查看完整版本: ObjectID返回错误64位a