HRESULT Get_CH_Table_A([in]VARIANT* en_name,[out,retval]SAFEARRAY(VARIANT)* pch_name),如何实现入参为字符串数组,出参也为字符串数组,不知道这样定义对不对?
客户调用的写法(用SAFEARRAY)以及STDMETHODIMP CCE_Map::Get_CH_Table_A(VARIANT *en_name,SAFEARRAY **pch_name){}怎么定义呢?
实在搞不懂数组传递,不知道该怎么写了,大家帮帮忙

解决方案 »

  1.   

    都用VARIANT包一下HRESILT GET_CH_Table_A([in,out]VARIANT* var)
      

  2.   

    是的,我现在就是用VARIANT*包起来了我在客户调COM的程序:BSTR* pData = NULL;     
    SAFEARRAY* psa;       
    SAFEARRAYBOUND sad[1];
    sad[0].cElements = 2;
    sad[0].lLbound = 0;
    psa = ::SafeArrayCreate(VT_BSTR,1,sad);???
    VARIANT var;
    var.vt = VT_ARRAY|VT_BSTR;
    var.parray = psa;hr = pCE_Map->Get_CH_Table_A(&var);
    //*****************************************
    我想把pData赋值,然后塞进psa里怎么做阿?
      

  3.   

    SafeArrayAccessData()怎么传BSTR??
      

  4.   

    试一下SAFEARRAYBOUND sad[] = {2, 0};
    SAFEARRAY* psa = ::SafeArrayCreate(VT_BSTR,1,sad);BSTR* pData = NULL;     
    SafeArrayAccessData(psa, (LPVOID *)&pData);
    for(int i = 0 ; i < 2 ; i ++) {
    OLECHAR * sz = L"aa";
    pData[i] = ::SysAllocString(sz);
    // 或 CString str = "aa";
    // pData[i] = str.AllocSysString();
    }
    SafeArrayUnaccessData(psa);VARIANT var;
    var.vt = VT_ARRAY|VT_BSTR;
    var.parray = psa;
    hr = pCE_Map->Get_CH_Table_A(&var);
      

  5.   

    客户端这样写可以了,但是在COM里却不能赋值try
    {
           psa = pvar_Tabel->parray;//报错
           //如果改为psa = *pvar_Tabel->pparray客户调用不出错         hr = SafeArrayAccessData(psa,(LPVOID *)&pData);
    OLECHAR * sz1 = L"asd";
             OLECHAR * sz2 = L"qwe";
    pData[0] = ::SysAllocString(sz1);
    pData[1] = ::SysAllocString(sz2); }
    catch(...)
    {
            ErrMessage = L"failed SafeArrayGetElement";
    }