2015-03-16 2 views
0

В настоящее время я разрабатываю клиент для службы SOAP.Клиент Delphi SOAP добавляет элементы в динамический массив

Импорт WSDL отлично работает, но мне грозит проблема с добавлением элементов в динамический массив.

Заявление в Дельфах:

Array_Of_attributWS = array of attributWS; 

    dienstleistungWS = class(TRemotable) 
     private 
     [..] 
     public 
     [..] 
     published 
     property attributeWS: Array_Of_attributWS 
     Index(IS_OPTN or IS_UNBD or IS_NLBL or IS_UNQL)read GetattributeWS 
     write SetattributeWS stored attributeWS_Specified; 

Я хочу, чтобы добавить элемент в attributeWS из другого блока. Для добавления элемента я использую этот код:

SetLength(dynArray, Length(dynArray)+1); 
    dynArray[High(dynArray)] := item; 

Но это обыкновение позвольте мне, я получаю следующее сообщение об ошибке: E2197 Constant объект не может быть передан в качестве параметра вара

Есть ли способ, чтобы добавить Элемент легко для динамического массива? Или есть способ передать массив в список, чтобы я мог просто сделать .Append (item)?

Delphi Version XE6 Спасибо!

ответ

0

Если вы проверяете SetattributeWS реализацию вы увидите, что он просто получает свой динамический массив в качестве параметра, сохраняет его const и помечает внутреннюю логическую переменную в качестве истинного (с указанием параметра было осознанное).

Часть const часть, которая вызывает ошибку E2197, которую вы видите.

Наилучшим вариантом является использование локального dynamic array переменную того же типа, а затем:

  1. установить его длину к фактической длине attributeWS + 1.
  2. скопировать оригинальные детали от attributeWS к локальная переменная, а затем добавьте новый элемент.
  3. присвойте этой переменной значение attributeWS.

На самом деле, было бы лучше, чтобы не присвоить динамический массив свойству запроса до тех пор, пока он был полностью заполнен со всеми необходимыми элементами, но это может зависеть от ваших потребностей.