描述:
大家好!我刚刚接触ATL COM编程,现在遇到了两个有关数据类型转换难题,故来请大家帮我一下。
1)我的组件里有一个unsigned char型的数组,我想将这个数据作为这个组件的属性公开,查了一下资料后,我想使用VARIANT类型作为这个属性的类型。但是结果总是不正确。如下是我的代码:
STDMETHODIMP CDeposit::get_Response(VARIANT *pVal)
{
// 获取无符号字符型数组
// Step 1: 变量声明
SAFEARRAYBOUND ResponseArrayBound; // 数组边界描述符
SAFEARRAY ResponseArray; // 安全数组描述符
// Step 2: 构造安全数组描述符
ResponseArrayBound.cElements = m_nArrayLength; // 响应的长度 ResponseArrayBound.lLbound = 1; // ? 等于 1 还是 0 呢 ?
ResponseArray.cDims = 1; // 维数
ResponseArray.fFeatures = 0;
ResponseArray.cbElements = 1; // 元素大小
ResponseArray.cLocks = 0;
ResponseArray.pvData = (void *)m_pArrayUChar; // 数据首址
ResponseArray.rgsabound[0] = ResponseArrayBound; // 边界描述符
// Step 3: 置返回值
VariantInit(pVal); // 勿忘我
pVal->vt = VT_ARRAY | VT_UI1;
pVal->parray = &ResponseArray;
return S_OK;
}
2)我还想为这个组件声明一个方法,其中该方法的一个输入参数应该是char型数组,但是好像COM支持的类型中没有char型的,所以我想用BSTR,然后,再用VectorFromBstr()将输入参数转换为所需要的单字节字符数组。这样做可以吗?
或者有其它方法来实现吗?
我的这个组件是想被ASP脚本来调用的。
谢谢!
解决方案1:
要把char *转成BSTR
可用_bstr_t
类型转换总结:
http://dev.csdn.net/develop/article/12/12365.shtm
在COM中,传递字符串一般使用BSTR(BSTR*)