在C#中得到了
public static ArrayList MyFct()
{
var x = new ArrayList();
x.Add(5);
return x
}
在Interop的C ++方面,在调用Invoke_3()之后,我得到了一个variant_t,其中包含我的数组,但是如何“提取”它呢?
(例如,我想获取项目数等)
这是一个包含IDispatch引用的VARIANT(variant_t
是来自comdef.h
/#import
语句的包装器),因此您可以使用的方法,例如这样(省略错误检查):IDispatch
variant_t v;
HRESULT hr = unk->GetList(&v); // get my VARIANT that contains an ArrayList reference
// get "Count" method dispid
LPOLESTR countName = (LPOLESTR)L"Count";
DISPID dispidCount;
hr = V_DISPATCH(&v)->GetIDsOfNames(IID_NULL, &countName, DISPATCH_METHOD, 0, &dispidCount);
DISPPARAMS dp = { nullptr, nullptr, 0, 0 };
variant_t count;
hr = V_DISPATCH(&v)->Invoke(dispidCount, IID_NULL, 0, DISPATCH_METHOD, &dp, &count, nullptr, nullptr);
// get "Item(i)" method dispid
LPOLESTR itemName = (LPOLESTR)L"Item";
DISPID dispidName;
hr = V_DISPATCH(&v)->GetIDsOfNames(IID_NULL, &itemName, DISPATCH_METHOD, 0, &dispidName);
for (int i = 0; i < V_I4(&count); i++)
{
// build index as variant
variant_t index(i);
DISPPARAMS dpIndex = { &index, nullptr, 1, 0 };
// get item(i)
variant_t item;
hr = V_DISPATCH(&v)->Invoke(dispidName, IID_NULL, 0, DISPATCH_METHOD, &dpIndex, &item, nullptr, nullptr);
// item can be a scalar value
// String => VT_BSTR, Int32 => VT_I4, etc.
// or another ComVisible object => VT_DISPATCH, VT_UNKNOWN, etc.
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句