CComBSTR bsRef=piaRef;
m_Temp=bsRef.copy()

解决方案 »

  1.   

    CComBSTR bsRef=piaRef;
    //error C2440: 'initializing' : cannot convert from 'void *' to 'class ATL::CComBSTR'
    m_Temp=bsRef.copy();
    //error C2440: '=' : cannot convert from 'unsigned short *' to 'class ATL::CComVariant *'
      

  2.   

    将void*改为unsigned char *
      

  3.   

    我用CComBSTR bsRef=(unsigned char*)piaRef,也不行吗?
      

  4.   

    会报错:
    error C2440: 'type cast' : cannot convert from 'unsigned char *' to 'class ATL::CComBSTR'
      

  5.   

    m_Temp=::SysAllocString((OLECHAR *)piaRef)
      

  6.   

    //error C2440: '=' : cannot convert from 'unsigned short *' to 'class ATL::CComVariant *'
      

  7.   

    m_Temp=new CComVariant(::SysAllocString(OLECHAR *)piaRef));没有出错,但是我的m_Temp是COM组件中的一个PROPERTY,我想返回的是unsigned char类型(单字节),但经过上述转换后,就不再是单字节了呀!怎么办?
      

  8.   

    m_Temp = new CComVariant((char*) piaRef);就可以了。VB就是用的BSTR,你要给谁用阿?VC不用VARIANT的。
      

  9.   

    哦,我明白了,你要各字节数组:
    SAFEARRAY *psa = SafeArrayCreateVector(VT_UI1, 0, 1000);
    if (!psa)
      _com_issue_error(ERROR_NOT_ENOUGH_MEMORY);HRESULT hr
    for (long i = 0; i < 2; i ++)
    {
      if (FAILED (hr = SafeArrayPutElement(psa, &i, piaRef + i)))
        _com_issue_error(hr);
    }_variant_t va; // include <comdef.h>
    va.vt = VT_ARRAY | VT_UI1;
    va.parray = psa;m_Temp = new CComVariant(va);
      

  10.   

    SafeArrayPutElement(psa, &i, piaRef + i)
    //error C2036: 'void *' : unknown size
      

  11.   

    To GrayWhite:
    为什么要for(long i=0;i<2;i++)?
      

  12.   

    到底你想怎样转换嘛,是将数组内的值拷贝到CComVariant中存为字符串吗?
      

  13.   

    我是想把piaRef中的值照原样返回给其它程序使用。我正在做的是一个COM组件。谢谢各位!
      

  14.   

    unsigned char *s=new unsigned char[1000];
    strcpy((char*)s,"1234");//可以用你自己方法设置s中的值。
    BSTR bstrS;
    oleS=A2WBSTR((char*)s);//将char*转换成BSTR类型CComVariant comVT;
    comVT=oleS;//将BSTR转成CComVariant,这里一步也可,comVT=A2WBSTR((char*)s);
      

  15.   

    谢谢你!
    但我还有一个问题,就是如果在s中有'\0'之类的东西我该怎么返回呢?char *遇到'\0'会认为到头了。
    完整的设计是这样的,我定义一个void * 用来从一个外部设备获取数据,该数据应该是unsigned char,我想把这个返回的数据作为属性传出,让其它应用使用(如VB)。
      

  16.   

    谢谢各位的回复!我的问题解决了!如下:
    SAFEARRAY *psa = SafeArrayCreateVector(VT_UI1, 0, 1000);
    if (!psa)
       return S_FALSE;
    HRESULT hr;
    for (long i = 0; i < 1000; i ++)
       if (FAILED (hr = SafeArrayPutElement(psa, &i, ((unsigned char*)piaRefTemplate) + i)))
    return S_FALSE;
    VARIANT va;
    va.vt = VT_ARRAY | VT_UI1;
    va.parray = psa;
    CComVariant *m_Temp = new CComVariant();
    m_Temp->Copy(&va);