我在新建事件的时候,需要返回一串数据(一些是CSTRING的   一些是DWORD的数组)。 在事件的参数中都没有找到。我要如何转化才能传递这些参数呢??    能不能通过指针??  谢谢!!

解决方案 »

  1.   


    你能简单的举个例子吗??     如果我要转化一组char数组。我是这样操作的
    char leddata[5];
    VARIANT val;
    val.vt = VT_BYREF;
    val.pbVal = (unsigned char)leddata;
    FireSubmitInfo(val);不过这样写还是报错,提示:error C2660: 'FireSubmitInfo': function does not take  parameters
      

  2.   

    //属性字段名称集合    下次记得用VARIANT的封装类_variant_t,这次就算了
    VARIANT pFields;
    AFX_MANAGE_STATE(AfxGetStaticModuleState())//选择MFC支持自动添加
    PCHAR ArrayBack[] = {"Id","Name"};//返回的数组,最简单的形式

    SAFEARRAY* psa;                    //定义数组描述符
    SAFEARRAYBOUND bound[1] = { 2,0 }; //一维数组.从0 开始,有2个元素。
    psa = SafeArrayCreate( VT_VARIANT, 1, bound );//创建数组 
    _ASSERTE ( psa != NULL );
    for(int i=0;i<2;i++)
    {
    _variant_t vr = ArrayBack[i];
    SafeArrayPutElement(psa,(long*)&i,&vr);//数组赋值,将vr指向VT_VARIANT类型的SAFEARRAY对象psa中   
    }

    pFields.vt = VT_ARRAY | VT_VARIANT;// 变体数组,且值为变体
    pFields.parray = psa; //数组传入返回值
      

  3.   

    返回字符串集合 可以考虑用IEmuStringtypedef std::vector<CStdString> StringArray;
    STDMETHODIMP CMyClass::GetInfos(short nClass, IEnumString **punk)
    {
    CHKSIMUSHOP;
    USES_CONVERSION;
    CString szInfos=“”;
    std::vector<LPOLESTR> szLines;
    StringArray::iterator it;
    it = szInfos.begin();
    for (; it!=szInfos.end(); ++it)
    szLines.push_back (A2W((PCSTR)(*it)));

    typedef CComObject<CComEnum < IEnumString, &IID_IEnumString,
    LPOLESTR, _Copy <LPOLESTR> > >
    enumString;
    enumString* pEnum;

    enumString::CreateInstance (&pEnum);
    #if _MSC_VER >= 1400
    HRESULT hr = pEnum->Init(szLines.begin()._Myptr,szLines.end()._Myptr, 0, AtlFlagCopy);
    #elif _MSC_VER<1300
    HRESULT hr = pEnum->Init(szLines.begin(),szLines.end(), 0, AtlFlagCopy);
    #else
    HRESULT hr = pEnum->Init(&(*szLines.begin()),&(*szLines.end()), 0, AtlFlagCopy);
    #endif if (SUCCEEDED(hr))
    hr = pEnum->QueryInterface(IID_IEnumString, (void**)punk);

    if (FAILED(hr))
    return hr;

    return S_OK;
    }