クラス機能の実装
IUnknownを実装した後は、CIchigo1として提供したい機能を実装します。
ここではサンプルとして、与えられた文字列をログファイルに記録する機能を実装することにします。
インターフェースを独自に定義することもできますが、ここでは標準で提供されているインターフェースを使いまわすことにします。(独自に定義する方法については別途説明します。)
ISequentialStreamのインターフェースは次の通りです。
class ISequentialStream : public IUnknown
{
public:
HRESULT STDMETHODCALLTYPE Read( void* pv, ULONG cb, ULONG* pcbRead );
HRESULT STDMETHODCALLTYPE Write( const void* pv, ULONG cb,
ULONG* pcbWritten );
};
CIchigo1では、次のようにRead(読み込み)は実装せず、Write(ログへの出力)のみ実装しました。
#define LOGFILENAME L"c:\\tmp\\ichigo1.txt"
HRESULT STDMETHODCALLTYPE CIchigo1::Read( void* pv, ULONG cb,
ULONG* pcbRead)
{
*pcbRead = 0;
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CIchigo1::Write( const void* pv, ULONG cb,
ULONG* pcbWritten)
{
return suppLogFileAppendW( LOGFILENAME, pv, cb, pcbWritten );
}
ヘルパ関数suppLogFileAppendWについては
サンプルで用いたヘルパ関数をご覧ください。
関連ページ
COM/ActiveXの解説ページ 目次
前の項目: IUnknownとその実装
次の項目: class object