#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;}