分享

Write and read binary data in VARIANT – Code Library

 quasiceo 2013-12-05

Write and read binary data in VARIANT

Share on:more0

2006-11-22 Category: Win32/MFC 0 2,898 views

We offen need to store some binary data in the mdb database, thus we have to transefer the data by VARIANT structure.
But how to read from binary data from VARIANT or write to? Here is a solution by safe array of VARRIANT.


BOOL GetBinaryFromVariant(COleVariant & ovData, BYTE ** ppBuf, unsigned long * pcBufLen)
{
BOOL fRetVal = FALSE;
//Binary data is stored in the variant as an array of unsigned char
if(ovData.vt == (VT_ARRAY|VT_UI1)) // (OLE SAFEARRAY)
{
//Retrieve size of array
*pcBufLen = ovData.parray->rgsabound[0].cElements;
*ppBuf = new BYTE[*pcBufLen]; //Allocate a buffer to store the data
if(*ppBuf != NULL)
{
void * pArrayData;
//Obtain safe pointer to the array
SafeArrayAccessData(ovData.parray,&pArrayData);
//Copy the bitmap into our buffer
memcpy(*ppBuf, pArrayData, *pcBufLen); //Unlock the variant data
SafeArrayUnaccessData(ovData.parray);
fRetVal = TRUE;
}
}
return fRetVal;
}



BOOL PutBinaryIntoVariant(COleVariant * ovData, BYTE * pBuf,unsigned long cBufLen)
{
BOOL fRetVal = FALSE;
VARIANT var;
VariantInit(&var); //Initialize our variant
//Set the type to an array of unsigned chars (OLE SAFEARRAY)
var.vt = VT_ARRAY | VT_UI1;
//Set up the bounds structure
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].cElements = cBufLen;
rgsabound[0].lLbound = 0;
//Create an OLE SAFEARRAY
var.parray = SafeArrayCreate(VT_UI1,1,rgsabound);
if(var.parray != NULL)
{
void * pArrayData = NULL;
//Get a safe pointer to the array
SafeArrayAccessData(var.parray,&pArrayData);
//Copy data to it
memcpy(pArrayData, pBuf, cBufLen);
//Unlock the variant data
SafeArrayUnaccessData(var.parray);
*ovData = var;
// Create a COleVariant based on our variant
VariantClear(&var);
fRetVal = TRUE;
}
return fRetVal;
}

Permalink: Code Library ? http://www./write-and-read-binary-data-in-variant.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多