如何才能使ATL组件向客户端传递字符串数组(BSTR),其接口的参数是什么(即接口如何写)??

解决方案 »

  1.   

    字符串:
    GetString(/*[out]*/BSTR* pbstrOut)
    字符串数组:
    用VARIANT类型,包含SafeArray指针数据
      

  2.   

    搜索一下坛子里,SafeArray
    有很多
      

  3.   

    GetString(/*[out]*/SafeArray(unsigned char*) *pbstrOut)
      

  4.   

    GetString([out,in]int* length,[size_is(*length),out]BSTR** pbstrOut)
    length在外部赋值,
    在该方法里面,需要做一下操作:先为pbstrOut分配内存
    *pbstrOut = (BSTR*)CoTaskMemAlloc(sizeof(BSTR) * *length); 
    然后可以对每项赋值了
    for(int i=0;i<length;i++)
    {
    *pbstrOut[i] = ...;
    }当然,代替的方法很多,比如:把几个字符串通过自定义的分隔符拼成一个串传出去
    又或用安全数组更好
      

  5.   

    ...........  GetString(VARIAINT* str)
    {
             long l=0;
             _bstr_t bstr;
             char cstr[100]; SAFEARRAY* sa;
    SAFEARRAYBOUND sb;
    sb.lLbound=0;
    sb.cElements=9;
    sa=SafeArrayCreate(VT_BSTR,1,&sb);
            
             for(l=0;l<10;l++)
             {
                 sprintf(cstr,"%d",l);
                 bstr=cstr;
        SafeArrayPutElement(sa,(long*)&l,bstr);
             } VariantInit(str);
    str.vt=VT_ARRAY|VT_BSTR;
    str.parray=sa;         return S_OK;
    }
      

  6.   

    回:jieyf(天马行空) 接口为:
    [id(1), helpstring("method ShowGrid")] HRESULT ShowGrid([out,in]int* length,[size_is(*length),out,retval]BSTR** pbstrOut);客户端调用为:
    int i;
    i=2;
    BSTR * varValue=m_StationSet->ShowGrid(&i);CString strT[2];
    strT[0]=_com_util::ConvertBSTRToString(varValue[0]);
    strT[1]=_com_util::ConvertBSTRToString(varValue[1]);结果在最后一条语句执行时,出现Unhandled exception,希望大家指正?
      

  7.   

    那在ASP中怎样调用以上的安全数组??