![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте. Есть конфиг в 5kb записанный в xml файле. Я парсю его в массив, который состоит из классов в которых есть ещё массивы. Вешаю все функции парсинга на обработку по нажатию кнопки - и тут падение, access violation at address 00000000 и открывается дамп памяти в котором хз что.
Путём комментирования кода выявил что если убрать кусок парсинга - всё работает. Возможно его надо по другому организовывать? Сейчас примерно следующее: Код:
// LOAD INFO xmlDoc := IXMLDOMDocument(CreateOleObject('msxml.domdocument')); xmlDoc.load('E:\1.xml'); xmlDoc.async := false; if xmlDoc.parseError.reason <> '' then begin ShowMessage( xmlDoc.parseError.reason ); end else begin nlist:= xmlDoc.getElementsByTagName('p'); SetLength( allPItemInfo, nlist.length ); for i := 0 to nlist.length-1 do begin xmlpItem := nlist.item[i].childNodes ; xmlpItemAdd := pItem.Create; xmlpItemAdd.name := nlist.item[i].attributes.getNamedItem('name').nodeValue ; SetLength(xmlpItemAdd.params, xmlpItem.length-1); for ii := 0 to xmlpItem.length-1 do begin if xmlpItem.item[ii].nodeName = 'desc' then begin xmlpItemAdd.desc := xmlpItem.item[ii].text ; end else begin { ЕСЛИ ЗАКОМЕНИТЬ ЭТО} xmlpItemAdd.params[ii] := pItemParam.Create; xmlpItemAdd.params[ii].name := xmlpItem.item[ii].nodeName ; xmlpItemAdd.params[ii].text := xmlpItem.item[ii].text ; { { ДО СЮДА } end; end; allPItemInfo[i] := xmlpItemAdd; end; end; Код:
pItemParam = class name : string; text: string; end; pItem = class name : string; desc : string; layer: string; params : array of pItemParam; end; ... allPItemInfo : array of pItem; То всё работает, более менее, протестить не могу так как дальше оно не идёт без конфига. + У меня там ещё много массивов, у которых я постоянно меняю длину на увеличение и уменьшение, может из -за них быть? |
#2
|
|||
|
|||
![]() Известная проблема - COM-объект умирает.
Попробуй отключить оптимизатор. Еще можно попробовать создавать COM-объект так: Код:
var xmlDoc : TXMLDocument; begin xmlDoc := CreateOleObject('msxml.domdocument') As IXMLDocument; ... |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
KillDead (20.11.2012)
|
#3
|
||||
|
||||
![]() Советую использовать NativeXML.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |