我已经在C#中使用返回字符串数组的方法创建了一个COM包装器:
public string[] GetArrayOfStrings()
{
string[] array = new string[3];
array[0] = "first";
array[1] = "second";
array[2] = "third";
return array;
}
在VB6中,我正在调用该方法并在这样的列表中显示字符串:
Dim s() As String
s = obj.GetArrayOfStrings()
For i = LBound(s) To UBound(s)
List1.AddItem s(i)
Next i
有谁知道如何从Borland C ++调用该方法并获取返回数组中的所有元素?
最佳答案
COM中的数组由SAFEARRAY
结构处理。
根据COM对象公开数组的方式,它可能直接返回SAFEARRAY
,例如:
SAFEARRAY *psa = obj->GetArrayOfStrings();
VARTYPE vtype;
SafeArrayGetVartype(psa, &vtype);
if (vtype == VT_BSTR)
{
LONG lBound, uBound;
SafeArrayGetLBound(psa, 0, &lBound);
SafeArrayGetUBound(psa, 0, &uBound);
for(LONG i = lBound; i <= uBound; ++i)
{
BSTR str;
SafeArrayGetElement(psa, &i, &str);
...
SysFreeString(str);
}
}
SafeArrayDestroy(psa);
或者也可以将其包装在
VARIANT
结构内部,例如:VARIANT v = obj->GetArrayOfStrings();
if (V_VT(&v) & VT_ARRAY)
{
SAFEARRAY *psa = V_ARRAY(&v);
...
}
VariantClear(&v);
无论哪种方式,数组内部的元素都可以包装或不包装在
VARIANT
结构的内部,例如:SafeArrayGetVartype(psa, &vtype);
if (vtype == VT_VARIANT)
{
...
VARIANT elem;
VariantInit(&elem);
SafeArrayGetElement(psa, &i, &elem);
...
VariantClear(&elem);
...
}
关于c++ - 如何在Borland C++中调用返回字符串数组的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19151603/