b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

colevariant_colevariant 哪个类_colevariant用法(12)

电脑杂谈  发布时间:2017-01-21 04:03:09  来源:网络整理

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

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...