2012-04-23 2 views
0

일부 데이터를 문자 배열로 수신합니다. 이 데이터를 스트림 (IUnknown * pInput)을받는 메소드에 전달하려고합니다. SSL에 0x75e49875에서배열을 IStream에 쓰기

처리되지 않은 예외 : 나는 오류가


#include "xmllite.h" 
#include <atlbase.h> 

CHAR acTemp [100] = {0}; 
CComPtr<IStream> pDataStream; 
HRESULT hr; 

hr = IStream_Write (pDataStream, acTemp, sizeof (acTemp)); 

:

나는이 코드 조각 (Visual C++를 사용)를 디버깅하기 위해 노력했다. exe : 0xC0000005 : 0x00000000 위치를 읽는 액세스 위반.

파일에서 strem을 만드는 다음 코드는 작동하지만 파일을 만들지 않으려는 이유는 원래 배열에서 변환 할 수 없기 때문입니다.

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

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

답변

0

구체적 질문에 대답하기 위해, 단편이다

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

이때 acXml 스트림에 배치하는 데이터를 포함하는 문자 배열이다.

이전에 작동하지 않는 이유를 찾지 못했지만 지금까지 제대로 작동했습니다. 도움을 주신 @Matthias!

+0

또한 스트림을 먼저 생성 한 다음 write 메서드를 사용하여 데이터를 채우는 것이 더 쉽습니다. –

+0

@SamuelZhang, 어떻게 처리하겠습니까? 몇 가지 문제가 있습니다. 시도했습니다 : '있는 IStream * pInput;' 'CHAR caStream [] = "asdkhgkjfhgdhg ';' 'pInput-> 쓰기 (caStream,는 sizeof (caStream), NULL) ' 및 예약 0x002b1be2에서 에러 처리되지 않은 예외를 가지고 SSL.exe : 0xC0000005 : 0x00000000 위치를 읽는 액세스 위반. – kdmin

+0

먼저, IStream 인스턴스, 예 : NULL 처리기를 사용하여 CreateStreamOnHGlobal. 다음으로, sizeof는 char 포인터의 크기를 반환한다. 대신 ARRAYSIZE를 사용하십시오. –

3

당신이 사용하는 "자신의"메모리를 지정할 수 GlobalAlloc에 ​​사용하는 것도 가능

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

그것을 할 수 있었다. (귀하의 독일어가 좋은 경우를 위해서 - http://msdn.microsoft.com/de-de/magazine/cc163436.aspx#S5 참조).

+0

죄송합니다.하지만이 메모리의 내용을 어떻게 지정합니까? "acTemp"와 연결하는 방법은 무엇입니까? (이 배열에는 데이터 입력이 있습니다.) – kdmin

+0

기사에서 (독일어로 :-)) 사용하는 메모리는 CreateStreamOnHGlobal의 첫 번째 매개 변수로 지정됩니다. 이 예제에서는 0을 제공하지만 GlobalAlloc을 사용할 수 있습니다. 아마도 acTemp에 연결할 수 없습니다 ... 죄송합니다 :-( – Matthias

+0

나는이 페이지가 [this] (http://msdn.microsoft.com/en-us/magazine/cc163436.aspx)라고 생각합니다.) – kdmin