0

我收到一些数据作为 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);
4

2 回答 2

3

你可以做

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

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

于 2012-04-23T19:21:38.663 回答
0

为了具体回答这个问题,片段是:

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

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

我不知道为什么前一个不起作用,但到目前为止这个工作正常。感谢@Matthias 的帮助!

于 2012-04-24T11:37:44.400 回答