- #include <Afxdisp.h>
- 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 bitmap 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;
- }
转自:http://blog.youkuaiyun.com/zgl7903/article/details/2536463