IStreamを簡単に作る

APIのCreateStreamOnHGlobalを利用すると簡単にIStreamを取得できる。COMインターフェースの中にはIStreamでデータを受け取るものがあるのでそういう場合に重宝する。

#include "objidl.h"

//
//	グローバルメモリ上に新しくIStreamを作る
//
bool	CreateOnHGlobal(IStream** ppIStream)
{
	HRESULT	hr;

	if(ppIStream == NULL)
		return	false;
	hr = ::CreateStreamOnHGlobal(NULL,TRUE,ppIStream);
	if(SUCCEEDED(hr) && *ppIStream)
		return	true;

	*ppIStream = NULL;
	return	false;
}



//
//	テスト用関数
//
void	Test(void)
{
	::CoInitialize(NULL);


	bool		ret;
	HRESULT		hr;
	IStream*	pIStream;

	//メモリ上にIStreamを確保
	pIStream = NULL;
	ret = CreateOnHGlobal(&pIStream);

	//IStreamへ10byteデータ書き込み
	hr = E_FAIL;
	if(ret)
		hr = pIStream->Write("1234567890",10,NULL);
	if(FAILED(hr))
		ret = false;

	if(ret)
		::MessageBox(NULL,_T("成功しました"),_T(""),MB_OK);
	else
		::MessageBox(NULL,_T("失敗しました"),_T(""),MB_OK);

	if(pIStream)
		pIStream->Release();

	::CoUninitialize();
}

プロジェクトファイルをダウンロード


カテゴリー「ファイル・フォルダ」 のエントリー