Winapi 将安全数组数据转换为无符号字符*

Winapi 将安全数组数据转换为无符号字符*,winapi,com,safearray,Winapi,Com,Safearray,我正在尝试将SAFEARRAY数据指针转换为unsinged char*。然而,我没有得到预期的数据。这里是一个片段 SafeArrayLock(psaFrameData); psaFrameData->rgsabound->cElements; int nCount = psaFrameData->rgsabound->cElements - psaFrameData->rgsabound->lLbound + 1; frameData = new un

我正在尝试将
SAFEARRAY
数据指针转换为
unsinged char*
。然而,我没有得到预期的数据。这里是一个片段

SafeArrayLock(psaFrameData);
psaFrameData->rgsabound->cElements;
int nCount = psaFrameData->rgsabound->cElements -   psaFrameData->rgsabound->lLbound + 1;
frameData = new unsigned char[nCount];
memset(frameData, 0, nCount);

for (int i = 0; i < nCount; ++i)
{
    frameData[i] = ((unsigned char*)(psaFrameData)->pvData)[i];
}    
SafeArrayUnlock(psaFrameData);
SafeArrayLock(psaFrameData);
psaFrameData->rgsabound->celeents;
int nCount=psaFrameData->rgsabound->celeents-psaFrameData->rgsabound->lLbound+1;
frameData=新的无符号字符[nCount];
memset(frameData,0,nCount);
对于(int i=0;ipvData[i];
}    
SafeArrayUnlock(psaFrameData);

不要手动锁定阵列,然后直接访问其
pvData
(或其任何其他数据成员)。改为使用各种访问器功能,例如:

递增数组的锁计数,并检索指向数组数据的指针

尝试类似以下内容:

//安全检查:确保数组只有一个维度。。。
如果(SafeArrayGetDim(psaFrameData)!=1)
{
//处理错误。。。
}
其他的
{
//安全检查:确保数组包含字节元素。。。
变量类型vt=0;
SafeArrayGetVartype(psaFrameData和vt);
如果(vt!=vt_UI1)
{
//处理错误。。。
}
其他的
{
//获取指向数组字节数据的指针。。。
无符号字符*数据;
if(失败(安全阵列访问数据(psaFrameData,(void**)和数据)))
{
//处理错误。。。
}
其他的
{
//计算数组中的字节数。。。
长耳结缔组织,耳结缔组织;
SafeArrayGetBound(psaFrameData、1和lBound);
安全阵列etubound(psaFrameData,1和uBound);
长N计数=uBound-lBound+1;
//复制字节。。。
frameData=新的无符号字符[nCount];
memcpy(frameData、data、nCount);
//释放指向数组字节数据的指针。。。
SafeArrayUnaccessData(psaFrameData);
}
}
}

这不是C。要么更新代码,要么标记。n计数关闭1?@Anders刚刚尝试使用cElements作为大小,但没有区别。我只是在问转换SAFEARRAY是否正确。您的SAFEARRAY真的是VT_UI1类型吗?如果是,只需运行
CopyMemory(frameData,psaFrameData->pvData,psaFrameData->rgsabound->cElements)
您希望获得哪些数据,以及您观察到哪些数据?首先如何填充
psaFrameData