参数写VARIANT 里面放一个SAFEARRAY 

解决方案 »

  1.   

     SAFEARRAY* pSafeArray;
    SAFEARRAYBOUND rgsabound[1];
    rgsabound[0].lLbound = 0;
    rgsabound[0].cElements = num;pSafeArray = SafeArrayCreate(VT_BSTR, 1, rgsabound);
    if(pSafeArray == NULL)
    {
    return;
    }for(long n = 0; n < num; n++)
    {
    BSTR bstr = SysAllocString(tempArray[n].c_str());
    SafeArrayPutElement(pSafeArray, &n, bstr);
    SysFreeString(bstr);
    }VARIANT pArray;
    pArray.vt = VT_ARRAY|VT_BSTR;
    pArray.parray = pSafeArray;
    使用
    long plLowBound, plUpperBound;
    SafeArrayGetLBound(data.parray, 1, &plLowBound);
    SafeArrayGetUBound(data.parray, 1, &plUpperBound);if (plUpperBound < plLowBound)
    return E_FAIL; BSTR bstr = SysAllocString(L"");
    SafeArrayGetElement(pArray, &i, &bstr);
    接口的参数声明:
    (VARIANT data)
      

  2.   

    http://blog.chinaunix.net/uid-21372424-id-119789.html
      

  3.   

    SAFEARRAY是比较方便的方法,如果你不愿意使用,可以自己构造一个格式的字符串的方式(比如将所有数据构造在一个xml中,然后通过字符串传递),这样做的好处是灵活,比如先在外面定义一个模板,当数据格式改变了,你只需要改变模板文件而不必改源代码重新编译,缺点是由解析而造成效率较低,不适宜用在反复频繁调用的地方。