CComBSTR bsRef=piaRef;
m_Temp=bsRef.copy()
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 *'
将void*改为unsigned char *
我用CComBSTR bsRef=(unsigned char*)piaRef,也不行吗?
会报错:
error C2440: 'type cast' : cannot convert from 'unsigned char *' to 'class ATL::CComBSTR'
m_Temp=::SysAllocString((OLECHAR *)piaRef)
//error C2440: '=' : cannot convert from 'unsigned short *' to 'class ATL::CComVariant *'
m_Temp=new CComVariant(::SysAllocString(OLECHAR *)piaRef));没有出错,但是我的m_Temp是COM组件中的一个PROPERTY,我想返回的是
unsigned char类型(单字节),但经过上述转换后,就不再是单字节了呀!怎么办?
把这个属性的类型改成BSTR
m_Temp = new CComVariant((char*) piaRef);就可以了。VB就是用的BSTR,你要给谁用阿?VC不用VARIANT的。
哦,我明白了,你要各字节数组:
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);
SafeArrayPutElement(psa, &i, piaRef + i)
//error C2036: 'void *' : unknown size
To GrayWhite:为什么要for(long i=0;i<2;i++)?
到底你想怎样转换嘛,是将数组内的值拷贝到CComVariant中存为字符串吗?
我是想把piaRef中的值照原样返回给其它程序使用。我正在做的是一个COM组件。谢谢各位!
unsigned char *s=new unsigned char[1000];
strcpy((char*)s,"1234");//可以用你自己方法设置s中的值。
BSTR bstrS;
oleS=A2WBSTR((char*)s);//将char*转换成BSTR类型
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-27731-12.html
而雷军却又说小米手机在中国占有率第一
舰艇再多管比用
抵制南方