« FedoraかUbuntuか | トップページ | Kindle 3.1でX0213の漢字はどうなった »

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メソッドが内部で動的に割り当てたメモリを呼び出し側に引き渡すようには思えないんです。

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

« FedoraかUbuntuか | トップページ | Kindle 3.1でX0213の漢字はどうなった »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/285638/38852356

この記事へのトラックバック一覧です: IEnumFORMATETC::Next:

« FedoraかUbuntuか | トップページ | Kindle 3.1でX0213の漢字はどうなった »