Delphi SOAP Client将项添加到动态数组

时间:2015-03-16 09:23:46

标签: arrays delphi soap delphi-xe6

我目前正在为SOAP服务开发客户端。

WSDL导入工作正常,但我遇到了需要将项添加到动态数组的问题。

delphi中的声明:

    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常量对象不能作为var参数传递

有没有办法轻松添加动态数组? 或者有没有办法将数组转换为列表,以便我可以做.Append(item)?

Delphi版本XE6 谢谢!

1 个答案:

答案 0 :(得分:0)

如果您检查SetattributeWS实现,您会看到它只是将动态数组作为const参数,将其存储并将内部布尔变量标记为true(表示参数已通知)。

const部分导致您看到的 E2197 错误。

最好的选择是使用相同类型的本地dynamic array变量,然后:

  1. 将其长度设置为attributeWS + 1的实际长度。
  2. 将原始项目从attributeWS复制到本地变量,然后添加新项目。
  3. 将此变量分配给attributeWS属性。
  4. 实际上,最好不要将动态数组分配给请求属性,直到它填满所有必需的元素,但这可能取决于您的需求。