将数组写入IStream

时间:2012-04-23 19:12:33

标签: c++ windows xmllite

我收到一些数据作为char数组。我想将此数据传递给接收流的方法(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));

我收到错误:

SSL.exe中0x75e49875处的未处理异常:0xC0000005:访问冲突读取位置0x00000000。

我知道以下从文件创建strem的代码可以正常工作,但我不想因为无法从原始数组转换而创建文件。

CComPtr<IStream> pFileStream;
LPCSTR szFileName = "FileName";
HRESULT hr;

hr = SHCreateStreamOnFile(szFileName, STGM_READ, &pFileStream);

2 个答案:

答案 0 :(得分:3)

你可以做到

CComPtr<IStream> stream;
COM_VERIFY(::CreateStreamOnHGlobal(0, TRUE, &stream));

也可以使用GlobalAlloc指定要使用的“自己的”内存。 (如果您的德语很好 - 请参阅http://msdn.microsoft.com/de-de/magazine/cc163436.aspx#S5)。

答案 1 :(得分:0)

要专门回答这个问题,该片段为:

CHAR *acTemp;
acTemp = (CHAR *) GlobalAlloc (GMEM_FIXED, dwBytes);
memcpy (acTemp, acXml, dwBytes);
hr = ::CreateStreamOnHGlobal(acTemp, TRUE, &pDataStream);

在这种情况下,acXml是包含要放入流中的数据的char数组。

我没有发现为什么以前没有用,但到目前为止这个工作正常。感谢@Matthias的帮助!