急!请教各位大侠,如何在COM组件方法中返回VARIANT或ARRAY? 谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 mRS//是我封装 _RecordsetPtr 类tVal=mRS.GetCellValue("Image");//这是从数据库中取得数据,原理一样if((VT_ARRAY|VT_UI1)==(tVal.vt&(VT_ARRAY|VT_UI1))) //VT_ARRAY 代表为数组 VT_UI1是字节形的{ //如是数组,并且是字节形} 接上, //如果是………………LPBYTE pbData = NULL;HRESULT hr = S_OK;if (tVal.parray){ //在你访问SAFEARRAY数据之前,你必须调用SafeArrayAccessData。该函数锁定数据并且返回一个指针。在这里,锁定数组意味着增加该数组的内部计数器(cLocks) hr = SafeArrayAccessData(tVal.parray, (void **)&pbData);}elsehr = HRESULT_FROM_WIN32(GetLastError()); if (SUCCEEDED(hr)){ //你的代码 // tVal.parray->cDims 数组维数 // tVal.parray->rgsabound[0].cElements 第1维,元素个数 // pbData 数据指针 //tVal.parray 是一个结构 /* SAFEARRAY { short cDims //注释:这个数组有几维? short fFeatures //注释:这个数组有什么特性? short cbElements //注释:数组的每个元素有多大? int cLocks //注释:这个数组被锁定过几次? int pvData //注释:这个数组里的数据放在什么地方? SFArrayBOUND rgsabound[] } SFArrayBOUND 有几维,就有几个 SAFEARRAYBOUND { int cElements //注释:这一维有多少个元素? int lLbound //注释:它的索引从几开始? } */}if (pbData){//相应用来释放数据的函数是SafeArrayUnaccessData(),该功能释放该参数的计数。SafeArrayUnaccessData(tVal.parray);} INI文件同时有多个线程读取写入有没问题 非MFC。窗口叠放次序问题。望高手赐教!api resource.rm文件损坏 给IDC_EDIT11赋值难题 Edit Control 简单问题拿高分 如何在一个对话框弹出来时,初始化TreeCtrl让一些选项的CheckBox上打上钩 给一些建议 怎样访问磁盘设备?(在线) 好久没有来了,我今天来问一个问题,我给50分,大家可要帮助我啊? 如何check 当前 windows用户名 MFC程序运行时,我想实现如同Dos程序的printf功能,可以在Dos窗口显示处理情况,有没有办法呀?
if((VT_ARRAY|VT_UI1)==(tVal.vt&(VT_ARRAY|VT_UI1))) //VT_ARRAY 代表为数组 VT_UI1是字节形的
{
//如是数组,并且是字节形}
//如果是………………
LPBYTE pbData = NULL;
HRESULT hr = S_OK;
if (tVal.parray)
{
//在你访问SAFEARRAY数据之前,你必须调用SafeArrayAccessData。该函数锁定数据并且返回一个指针。在这里,锁定数组意味着增加该数组的内部计数器(cLocks)
hr = SafeArrayAccessData(tVal.parray, (void **)&pbData);
}
else
hr = HRESULT_FROM_WIN32(GetLastError());
if (SUCCEEDED(hr))
{
//你的代码
// tVal.parray->cDims 数组维数
// tVal.parray->rgsabound[0].cElements 第1维,元素个数
// pbData 数据指针 //tVal.parray 是一个结构
/*
SAFEARRAY
{
short cDims //注释:这个数组有几维?
short fFeatures //注释:这个数组有什么特性?
short cbElements //注释:数组的每个元素有多大?
int cLocks //注释:这个数组被锁定过几次?
int pvData //注释:这个数组里的数据放在什么地方?
SFArrayBOUND rgsabound[]
}
SFArrayBOUND 有几维,就有几个
SAFEARRAYBOUND
{
int cElements //注释:这一维有多少个元素?
int lLbound //注释:它的索引从几开始?
} */
}if (pbData)
{
//相应用来释放数据的函数是SafeArrayUnaccessData(),该功能释放该参数的计数。
SafeArrayUnaccessData(tVal.parray);
}