0

標準のテンプレート ライブラリを利用する多くのコードが書かれています。一部のアプリを Windows シェルに統合したいと考えています。これにより、ユーザーにより良いエクスペリエンスが提供されるはずです。

統合の 1 つには、シェル プレビュー プロバイダーが含まれます。コードは非常に単純ですが、何かを実装するための最良の方法に行き詰まっています。

シェルは、プレビュー ハンドラーを介して IStream オブジェクトを提供しており、主に std::getline がコールスタックのさらに下で呼び出されるように、それを std::ifstream オブジェクトに変換/適応させる必要があります。

適応を行う「標準的な」方法があるのか​​ 、それとも袖とコードをロールアップする必要があるのか​​ 疑問に思っていましたか?

ティア。

4

1 に答える 1

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を使用してプレビューハンドラーを実装しました。

于 2012-08-08T11:22:09.453 に答える