本帖最后由 yangmz1972 于 2025-7-25 12:49 编辑
学习AutoCAD插件开发没有多久,技术不太行。请教一下为什么下面的代码会出错:
Dim doc As ApplicationServices.Document = ApplicationServices.Application.DocumentManager.Open(cPathFile, False)
Dim db As DatabaseServices.Database = doc.Database
Dim ed As Autodesk.AutoCAD.EditorInput.Editor = doc.Editor
Using acLckDoc As DocumentLock = doc.LockDocument()
Using trans As Transaction = db.TransactionManager.StartTransaction()
Dim nod As DBDictionary = CType(trans.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForRead), DBDictionary)
'添加词典
If Not nod.Contains(XDICT_NAME) Then
nod.UpgradeOpen()
Dim customDict As New DBDictionary()
nod.SetAt(XDICT_NAME, customDict)
trans.AddNewlyCreatedDBObject(customDict, True)
' 添加初始数据
Dim xrec As New Xrecord()
xrec.Data = New ResultBuffer(New TypedValue(DxfCode.Text, SPECIAL_STRING))
customDict.SetAt(USERDATA_KEY, xrec)
trans.AddNewlyCreatedDBObject(xrec, True)
End If
trans.Commit()
End Using
doc.Database.Save()------------------------------------------这里出错
End Using
我讯飞星火了一下,他坚持说doc.Database没有save方法,腾讯元宝也说不出什么,只说的文件系统可能有问题,deepseek也没能解决问题。
后来我直接打开文档,再保存,测试如下:
Dim doc As ApplicationServices.Document = ApplicationServices.Application.DocumentManager.Open(cPathFile, False)
doc.Database.Save()------------------------------------------这里还是出错
后来我不用doc.database.save了,改用doc.SendStringToExecute("_.QSAVE", True, False, False),但DBMOD值前后始终为1,意味着doc.SendStringToExecute("_.QSAVE", True, False, False)没有作用。
请大佬指教一下。错误在哪里?
网友答: 我博客搜索save就能找到
https://www.cnblogs.com/JJBox/p/12156778.html网友答: 谢谢,经多方研究测试,用下面的这句就可以
doc.Database.SaveAs(doc.Name, True, DwgVersion.Current, doc.Database.SecurityParameters)网友答: 看api帮助文档,缺少参数网友答:
doc.Database.Save不需要参数的
学习AutoCAD插件开发没有多久,技术不太行。请教一下为什么下面的代码会出错:
Dim doc As ApplicationServices.Document = ApplicationServices.Application.DocumentManager.Open(cPathFile, False)
Dim db As DatabaseServices.Database = doc.Database
Dim ed As Autodesk.AutoCAD.EditorInput.Editor = doc.Editor
Using acLckDoc As DocumentLock = doc.LockDocument()
Using trans As Transaction = db.TransactionManager.StartTransaction()
Dim nod As DBDictionary = CType(trans.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForRead), DBDictionary)
'添加词典
If Not nod.Contains(XDICT_NAME) Then
nod.UpgradeOpen()
Dim customDict As New DBDictionary()
nod.SetAt(XDICT_NAME, customDict)
trans.AddNewlyCreatedDBObject(customDict, True)
' 添加初始数据
Dim xrec As New Xrecord()
xrec.Data = New ResultBuffer(New TypedValue(DxfCode.Text, SPECIAL_STRING))
customDict.SetAt(USERDATA_KEY, xrec)
trans.AddNewlyCreatedDBObject(xrec, True)
End If
trans.Commit()
End Using
doc.Database.Save()------------------------------------------这里出错
End Using
我讯飞星火了一下,他坚持说doc.Database没有save方法,腾讯元宝也说不出什么,只说的文件系统可能有问题,deepseek也没能解决问题。
后来我直接打开文档,再保存,测试如下:
Dim doc As ApplicationServices.Document = ApplicationServices.Application.DocumentManager.Open(cPathFile, False)
doc.Database.Save()------------------------------------------这里还是出错
后来我不用doc.database.save了,改用doc.SendStringToExecute("_.QSAVE", True, False, False),但DBMOD值前后始终为1,意味着doc.SendStringToExecute("_.QSAVE", True, False, False)没有作用。
请大佬指教一下。错误在哪里?
网友答: 我博客搜索save就能找到
https://www.cnblogs.com/JJBox/p/12156778.html网友答: 谢谢,经多方研究测试,用下面的这句就可以
doc.Database.SaveAs(doc.Name, True, DwgVersion.Current, doc.Database.SecurityParameters)网友答: 看api帮助文档,缺少参数网友答:
yonjay 发表于 2025-7-26 12:33
看api帮助文档,缺少参数
doc.Database.Save不需要参数的