1

我正在 Delphi 中开发一个自动化服务器,并且有几个属性需要返回字符串数组。规范要求(带有 3 种语言的示例):

C# 
string[] Names { get; }

Visual Basic 
ReadOnly Property Names As String()
    Get

Visual C++ 
property array<String^>^ Names {
    array<String^>^ get ();
}

我尝试了很多方法来做到这一点,包括 SafeArrays 和 Variants 作为 RIDL 类型。我最近的尝试(所以我至少有一个例子)是:

function TFW.Get_Names: OleVariant; safecall;

var
  I : integer;
  NumFilters:integer;
  Filters:FieldsType;
  V:OleVariant;

begin
  NumFilters:=SplitFields(Filters,FilterNames,',','"');

  V := VarArrayCreate([1,NumFilters], VT_BSTR);

  for I := 1 to NumFilters do
    V[I]:=Filters[I];

  Get_Names:=V;  
end;

在这种情况下,客户端应用程序抱怨错误:

“无法将 'System.String[*]' 类型的对象转换为 'System.String[]' 类型。”

提前致谢!

4

1 回答 1

2

解决方案是创建从零开始的变量数组,而不是 1...X):

V := VarArrayCreate([0,NumFilters-1], VT_BSTR);

  for I := 0 to NumFilters-1 do
    V[I]:=Filters[I+1];

结案!

于 2017-11-19T21:45:05.483 回答