SafeArray
-
Hi, I want to return Binary data i've read from a file. I know it can be done by safe array.. can nebody give me some hint on how to do that Regards Sameer
-
Hi, I want to return Binary data i've read from a file. I know it can be done by safe array.. can nebody give me some hint on how to do that Regards Sameer
Use the type VT_U1 to store the binary data.
-
Hi, I want to return Binary data i've read from a file. I know it can be done by safe array.. can nebody give me some hint on how to do that Regards Sameer
-
Hi, I want to return Binary data i've read from a file. I know it can be done by safe array.. can nebody give me some hint on how to do that Regards Sameer
I do something similar (return binary data in a safe array) in my COM Mailslots article. The code in question is:
STDMETHODIMP CMailslotData::Read(VARIANT *ppResults)
{
if (!ppResults)
{
return E_POINTER;
}return CreateSafeArray(m_pData, m_length, ppResults);
}where m_pData points to the bytes of data and m_length is the number of bytes we have.
HRESULT CreateSafeArray(
BYTE *pData,
DWORD dataLength,
VARIANT *ppResults)
{
SAFEARRAYBOUND sab;
sab.cElements = dataLength;
sab.lLbound = 0;SAFEARRAY *pSa = SafeArrayCreateEx(VT_UI1, 1, &sab, 0);
PVOID pvData;
HRESULT hr = SafeArrayAccessData(pSa, &pvData);
if (SUCCEEDED(hr))
{
::CopyMemory(pvData, pData, dataLength);hr = ::SafeArrayUnaccessData(pSa);
}
if (SUCCEEDED(hr))
{
::VariantInit(ppResults);(\*ppResults).parray = pSa; (\*ppResults).vt = VT\_ARRAY | VT\_UI1;
}
return hr;
}Hope this helps. Len Holgate www.jetbyte.com The right code, right now.