我正在 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[]' 类型。”
提前致谢!