Есть примерно следующий код в проекте ATL VS.NET:
// idl
[propget, id(1), helpstring("property")] HRESULT PropName([out, retval] VARIANT* pVal);
// реализация
STDMETHODIMP ClassName::get_PropName(VARIANT* pVal)
{
VariantInit(pVal);
pVal->vt = VT_ARRAY | VT_BSTR;
SAFEARRAY* psa;
SAFEARRAYBOUND bounds = {4, 0};
psa = SafeArrayCreate(VT_BSTR, 1, &bounds);
BSTR* pBstrStrings;
SafeArrayAccessData(psa, (void**)&pBstrStrings);
for(UINT i = 0; i < psa->rgsabound->cElements; i++) {
pBstrStrings[i] = SysAllocString(L"SomeString");
}
SafeArrayUnaccessData(psa);
pVal->parray = psa;
return S_OK;
}
код клиента раннего связывания:
Dim obj As New ClassName
MsgBox obj.PropName(0) ' все работает прекрасно
как только снимаем ссылку в проекте на билиотеку и пишем
Dim obj As Object
Set obj = CreateObject("Lib.Object")
MsgBox obj.PropName(0) ' все умерло
сразу выдается ошибка "Wrong number of arguments or invalid property assignment".
Причем при просмотре объекта в дебагере видно, что свойство действидетьно содержит массив с указанными значениями.
В чем проблема?
Спасибо.