2012-08-07 5 views
0

표준 템플릿 라이브러리를 사용하는 많은 코드가 작성되었습니다. Windows 셸에 일부 앱을 통합하여 사용자에게 더 나은 환경을 제공하고 싶습니다.Windows 셸 IStream을 std :: ifstream/std :: get_line으로 변환합니다.

통합의 한 부분에는 셸 미리보기 공급자가 포함되어 있지만 코드는 매우 간단합니다. 그러나 뭔가를 구현하는 가장 좋은 방법을 고수하고 있습니다.

셸이 미리보기 처리기를 통해 IStream 개체를 제공하고 std :: getstream 개체를 호출 할 수 있도록 std :: getstream 개체로 변환/적용해야합니다.

적응을하는 "표준"방법이 있는지 궁금 해서요. 아니면 소매와 코드의 역할을해야합니까?

TIA. 잠시 동안 주변에 Faffed

답변

0

:

std::stringstream buff; 
BYTE ib[2048]; 
ULONG totread=0, read=0, sbuff = 2048; 
HRESULT hr; 
do { 
    hr = WinInputStream->Read(ib, sbuff, &read); 
    buff.write(ib, read); 
    totread+=read; 
} while((sbuff == read) && SUCCEEDED(hr)); 

if(totread == 0) return false; 
ifstream i; 
TCHAR* ncbuff = const_cast<TCHAR*>(buff.str().c_str()); 
i.rdbuf()->pubsetbuf(ncbuff, buff.str().length()); 

그러나 다시 처리하는 메모리로 모두 읽을 필요 좋아하지 않았다.

그래서 IInitializeWithFile을 사용하여 미리보기 처리기를 구현했습니다.