我收到一些数据作为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);
答案 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的帮助!