Записать массив в 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).

Другие вопросы по тегам