如何使用WSDL中定义的自定义数组类型

本文关键字:自定义 数组 类型 定义 何使用 WSDL | 更新日期: 2023-09-27 18:10:22

尝试学习如何在Delphi7应用程序中使用WSDL。我尝试使用的WSDL有一个自定义数组类型。

Pascal

ArrayOfSomething = array of Something;

如何实例化此数组类型

尝试过:

Pascal

var 
    somethingList : ArrayOfSomething;
begin
    somethingList := ArrayOfSomething...
end;

。。。上面的意思是我正在寻找一种方法,但没有找到。我实例化对象的正常方式是:

Pascal

var 
    object : className;
begin
    object := className.Create;
end;

所以你可以理解为什么我会尝试以同样的方式创建数组,即使它不是一个对象。

请记住,我正在抄袭C#代码,并试图使其在Pascal中工作。原始C#类似于:

C#

   List<Something> somethingList = new List<Something>();

用法如下:

C#

   envelope.listField = somethingList.ToArray();

我也试过这个:

Pascal

   var
       somethingList : TList;
   begin
       somethingList := TList.Create;
   end;

是的,在我试着把它放进信封之前,这是有效的。

Pascal

   envelope.listField := somethingList;

信封应为ArrayOfSomething而不是TList。错误类似于"不兼容类型,TList和ArrayOfSomething"。

如何使用WSDL中定义的自定义数组类型

array of是一个内置类型,它不是一个类。要设置其大小,请使用SetLength(),例如

var
  Arr: ArrayOfSomething;
begin
  SetLength(Arr, 273);

还要注意,它与列表不同,它是一个没有内置方法插入或删除值的数组。您可以读取和更改值,或更改数组的大小,不再需要。

如果你想要泛型,比如C#,你必须使用比7更高版本的Delphi。我不确定,但我认为它们是在德尔福2010或德尔福XE中引入的。我想有人可以向我更新这一点(更新:David Heffernan告诉我这是2009年的版本(

在这些更高版本中,您还可以使用TList<T>,这可能正是你想要的。在此之前,您可以使用TList,它保存指针(但不能直接与WSDL结合使用,因此内容可能必须首先移动到数组中(。您可能需要使用New((、Dispose((和强制转换才能使用它。

type
  ArrayOfSomething = array of Something;

这是一个Delphi动态数组。您可以通过调用SetLength:来初始化它

SetLength(somethingList, 42);

您应该阅读动态数组的文档以了解更多信息。