Тема: Ошибка при записи в пользовательский словарь
Пытаюсь записать булевое в группы 290-299 пользовательского словаря, при этом возникает фатальная ошибка и AutoCAD падает:) В чём может быть проблема? Диапазон групп разрешен для словарей, значение тоже соответствует, другие группы пишутся нормально.
Сейчас решил дописать функцию предварительной проверки соответствия DXF-групп и вносимых данных и незнаю что делать с 290-299? Может вообще их исключить и писать целые числа вместо булевых в другие группы. Функция приведена ниже. При вызове:
Asmi_XRec_Write xrObj, 290, False
AutoCAD 2004 падает с фатальной ошибкой:(
'---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ ' ФУНКЦИЯ ВНЕСЕНИЯ ОДНОЙ ГРУППЫ ДАННЫХ В Х-ЗАПИСЬ '---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ ' АРГУМЕНТЫ: ' XRec - (Variant- Объект AutoCAD) объект ХЗаписи ' пользовательского словаря AutoCAD ' DType - (Integer) DXF-группа куда записываются данные ' DValue - (Variant) Записываемые данные ' Dublicate (Optional Boolean) - Если True то ' разрешается запись дублирующихся DXF-групп '---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ ' ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: ' Variant - при успешной записи значение аргумента DValue, ' при ошибке Nothing '---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ ' Библиотека AsmiLIB. Версия функции 1.2. 05/11/2005 ' © Александр Смирнов '---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ Function Asmi_XRec_Write(ByVal XRec As AcadXRecord, _ ByVal DType As Integer, ByVal DValue As Variant, _ Optional ByVal Dublicate As Boolean = False) As Variant Dim exType As Variant Dim exValue As Variant Dim arIndex As Long Dim arCount As Long Dim isDublicate As Boolean Dim curType As Integer XRec.GetXRecordData exType, exValue If VarType(exType) And vbArray = vbArray _ And Dublicate = True Then arIndex = UBound(exType) + 1 ReDim Preserve exType(0 To arIndex) ReDim Preserve exValue(0 To arIndex) ElseIf VarType(exType) And vbArray = vbArray _ And Dublicate = False Then arCount = -1 isDublicate = False Do arCount = 1 + arCount curType = exType(arCount) If curType = DType Then arIndex = arCount isDublicate = True End If Loop While (arCount <> UBound(exType) And curType <> DType) If isDublicate = False Then arIndex = UBound(exType) + 1 ReDim Preserve exType(0 To arIndex) ReDim Preserve exValue(0 To arIndex) End If Else arIndex = 0 ReDim exType(0 To arIndex) As Integer ReDim exValue(0 To arIndex) As Variant End If exType(arIndex) = DType exValue(arIndex) = DValue On Error GoTo Err XRec.SetXRecordData exType, exValue Set XRec = Nothing Asmi_XRec_Write = DValue Exit Function Err: Asmi_XRec_Write = Nothing End Function