关于COM类型转换问题 CComBSTR bsRef=piaRef;m_Temp=bsRef.copy() 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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类型(单字节),但经过上述转换后,就不再是单字节了呀!怎么办? 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 hrfor (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类型CComVariant comVT;comVT=oleS;//将BSTR转成CComVariant,这里一步也可,comVT=A2WBSTR((char*)s); 谢谢你!但我还有一个问题,就是如果在s中有'\0'之类的东西我该怎么返回呢?char *遇到'\0'会认为到头了。完整的设计是这样的,我定义一个void * 用来从一个外部设备获取数据,该数据应该是unsigned char,我想把这个返回的数据作为属性传出,让其它应用使用(如VB)。 谢谢各位的回复!我的问题解决了!如下: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); 请问ListCtrl怎么支持文件或者文件夹拖拽? 关于IOP中的问一个关于WSAsend的问题 openGL的两个问题 如何在dll中建立窗口? r 如何把DR.WASTON这个程序去掉,每次点调试都是它弹出来,但又什么也干不了. 在WINDOWNS平台下使用临界区和原子操作的讨论 高分请教(决不食言)大家一个关于ActiveX服务器(可嵌入Word的那种)InPlace时文档读写的问题。 让对话框按照sin曲线在窗口上移动//咋整? 怎么实现视图的切换? 菜鸟问题,CString 如何转化成整形 如何画出.wav文件的声音波形
//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 *'
error C2440: 'type cast' : cannot convert from 'unsigned char *' to 'class ATL::CComBSTR'
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);
//error C2036: 'void *' : unknown size
为什么要for(long i=0;i<2;i++)?
strcpy((char*)s,"1234");//可以用你自己方法设置s中的值。
BSTR bstrS;
oleS=A2WBSTR((char*)s);//将char*转换成BSTR类型CComVariant comVT;
comVT=oleS;//将BSTR转成CComVariant,这里一步也可,comVT=A2WBSTR((char*)s);
但我还有一个问题,就是如果在s中有'\0'之类的东西我该怎么返回呢?char *遇到'\0'会认为到头了。
完整的设计是这样的,我定义一个void * 用来从一个外部设备获取数据,该数据应该是unsigned char,我想把这个返回的数据作为属性传出,让其它应用使用(如VB)。
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);