先做一个ActiveScriptSite,对象方法有参数传递,使用到Javascript的对象数组,对象数组的值可以通过IEnumVARIANT接口的值获取,但是如何获取他的名字呢?
Javascript脚本:
 var arrObj=new Array();
 arrObj.sGuid=goPrintableObject.sGuid;
 arrObj.sPath=goServerObject.sName + "//"+goPrintableObject.sName;
 arrObj.oObj=goPrintableObject;
 goActivateObject.Activate(arrObj);其中go开头的对象都是注册的全局对象,但是就是在goActivateObject的Activate方法传递的参数需要知道Array对象的名字,如何知道?

解决方案 »

  1.   

    我把如何获得值的部分代码列出来希望高手们能帮我把Array的名字列出:
    SAFEARRAY* ConvertToSafeArray(IDispatch* disp)
    {
    HRESULT hr;
    DISPPARAMS noArgs = { NULL, NULL, 0, 0 };
    CComVariant resultV;
    hr = disp->Invoke( DISPID_NEWENUM,
    IID_NULL,
    LOCALE_SYSTEM_DEFAULT,
    DISPATCH_PROPERTYGET,
    &noArgs,
    &resultV,
    NULL,
    NULL );
    if( FAILED( hr ))
    return NULL;
    if (resultV.vt != VT_UNKNOWN && resultV.vt != VT_DISPATCH)
    return NULL;

    CComQIPtr<IEnumVARIANT> pEnum( resultV.punkVal );
    if( !pEnum )
    return NULL;
    CSimpleArray<VARIANT> arrVariant;
    hr = S_OK;

    VARIANT elemV;
    VariantInit(&elemV);
    while( hr == S_OK )
    {
    hr = pEnum->Next( 1, &elemV, NULL );
    if( elemV.vt != VT_EMPTY )
    arrVariant.Add(elemV);
    else
    hr=S_FALSE;
    elemV.vt=VT_EMPTY;
    }
    int count=arrVariant.GetSize();
    if(count==0) return NULL;
    SAFEARRAY* results = SafeArrayCreateVector( VT_VARIANT, 0, count);
    SafeArrayLock(results);
    memcpy(results->pvData,arrVariant.GetData(),sizeof(VARIANT)*count);
    SafeArrayUnlock(results);
    return results;
    }