« 2011年1月 | トップページ | 2011年3月 »

2011年2月の記事

2011年2月13日 (日)

IEnumFORMATETC::Next

IEnumFORMATETCなんてもの初めて使うのですが、このNextメソッドをMSDNで調べると、こういう風に書いてある。

http://msdn.microsoft.com/en-us/library/dd542673(v=VS.85).aspx

HRESULT Next(
   [in]      ULONG celt,
   [out]     FORMATETC *rgelt,
   [in, out] ULONG *pceltFetched
);
rgelt [out]

... The enumerator is responsible for allocating any memory, and the caller is responsible for freeing it.  ...

この説明は、

エニュメレータ側にはメモリを割り当てる責任があり、呼び出し側にはそのメモリを開放する責任があります。

って感じですかね。

※ 「エニュメレータ」というのは、ちゃんと定義されてませんが、IEnumFORMATETC自体の説明に「 IDataObject::EnumFormatEtc がエニュメレータの IEnumFORMATETCインターフェースを提供します」とあり、IEnumFORMATETCインターフェースを実装するインスタンスのことをエニュメレータと呼んでいるようですね。これは、世間一般の「エニュメレータ」という言葉の使い方とも一致します。

でも、このrgeltっていうのは単に構造体のアドレスを渡すだけ。Nextメソッドが内部で動的に割り当てたメモリを呼び出し側に引き渡すようには思えないんです。

これって、どういう意味なんでしょうか。謎だ…。

« 2011年1月 | トップページ | 2011年3月 »