Записать массив в IStream
Я получаю некоторые данные в виде массива символов. Я хочу передать эти данные в метод, который получает поток (IUnknown *pInput).
Я попытался отладить этот кусок кода (используя Visual C++):
#include "xmllite.h"
#include <atlbase.h>
CHAR acTemp [100] = {0};
CComPtr<IStream> pDataStream;
HRESULT hr;
hr = IStream_Write (pDataStream, acTemp, sizeof (acTemp));
Я получаю ошибку:
Необработанное исключение в 0x75e49875 в SSL.exe: 0xC0000005: расположение чтения нарушения доступа 0x00000000.
Я знаю, что следующий код, который создает strem из файла, будет работать, но я не хотел создавать файл только потому, что не могу конвертировать из исходного массива.
CComPtr<IStream> pFileStream;
LPCSTR szFileName = "FileName";
HRESULT hr;
hr = SHCreateStreamOnFile(szFileName, STGM_READ, &pFileStream);
2 ответа
Чтобы конкретно ответить на вопрос, фрагмент кода:
CHAR *acTemp;
acTemp = (CHAR *) GlobalAlloc (GMEM_FIXED, dwBytes);
memcpy (acTemp, acXml, dwBytes);
hr = ::CreateStreamOnHGlobal(acTemp, TRUE, &pDataStream);
В этом случае acXml - это массив символов, содержащий данные для помещения в поток.
Я не выяснил, почему предыдущий не работал, но этот до сих пор работал нормально. Спасибо @Matthias за помощь!
Вы могли бы сделать
CComPtr<IStream> stream;
COM_VERIFY(::CreateStreamOnHGlobal(0, TRUE, &stream));
Также возможно использовать GlobalAlloc для указания "собственной" памяти для использования. (если вы хорошо владеете немецким языком - см. http://msdn.microsoft.com/de-de/magazine/cc163436.aspx).