- - PR -
[解決]COMオブジェクトのコレクションのオブジェクトを事前バインディングしたい
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-02-25 19:35
件名が難解で申し訳ありません。
mshtml.IHTMLDOMNodeインターフェイスのChildNodesプロパティはオブジェクト型の プロパティです。中身はHTMLElementやTextNodeのコレクションです。 遅延バインディングなら下のようなコードでコレクションの要素にアクセスすること ができますが,事前バインディングでコレクションの要素にアクセスするにはどう したらよいのでしょうか。
[ メッセージ編集済み 編集者: YAS 編集日時 2006-02-26 22:33 ] | ||||||||||||
|
投稿日時: 2006-02-25 23:20
[quote]
遅延バインディングなら下のようなコードでコレクションの要素にアクセスすること ができますが,事前バインディングでコレクションの要素にアクセスするにはどう したらよいのでしょうか。 [quote] もともと IDispatch* を返してくるプロパティなので、Object 型以外に事前バインディングのしようがありません。 適切なインターフェース型、この場合は IHTMLDOMChildrenCollection かな?でキャストしてください。 _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||||||||||
|
投稿日時: 2006-02-25 23:52
渋木宏明(ひどり)様,ありがとうございます。
やりたかったことができました! 最初のコードだとOption Strict Onにするとエラーになるので困っていたのです。 「IHTMLDOMChildrenCollection」はヘルプで一覧の中に見えていたはずなのに, 言われるまで気がつきませんでした。
バインディングについても教えて頂きありがとうございます。 今考えると質問の仕方が間違っていたと思います。 「childNodesが代入できるインターフェイスを教えてください」というのが 本質でした。 ところで,私は上のような状態になったことを「事前バインディング」ととらえて いたのですが,違っていたのでしょうか... でも,「In ChildNodes」のところは,前はObject型で,それがコレクション型か どうかもわからなかったのに,今はコレクション型であることがわかっています。 ここのところは遅延バインディングから事前バインディングになったといえない でしょうか。 | ||||||||||||
|
投稿日時: 2006-02-26 00:24
前の登校でも書きましたが、chidlNodes プロパティは元々 IDispatch* 型なので、事前バインディングをしても Object 型になります。
「知識」として「コレクションを返すはずである」ことが分かったので、正しい型にキャストできただけだと思います。 _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||||||||||
|
投稿日時: 2006-02-26 10:38
型を強く意識してコンパイル解決をある程度 (For Each ステートメントで) 図れているので、
Object 型をそのまま使うよりは良いでしょうね。
本当にこのままのロジックであれば、ちょっと危険に思えます。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-02-26 12:16
渋木宏明(ひどり)様,じゃんぬねっと様,ありがとうございます。
「正しい型にキャスト」「事前バインディング」「コンパイル解決」についてもう一度調べ,理解したいと思います。
と,おっしゃいますのは...? 私がもしかして危険かもしれないと考えるのは, ・ChildNodesのコレクションの要素を1つ1つ解放する処理がない ・For Eachの要素にCOMオブジェクトを使っているがループの中で解放する処理がない くらいなのですが,他に危険なところがありますでしょうか。 最初の質問から逸れてしまって申し訳ありません。 | ||||||||||||
|
投稿日時: 2006-02-26 21:20
それを「保証する」機構をプラスすると完璧ですね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-02-26 22:29
重ねてご指導ありがとうございました。 じゃんぬねっと様の「C#, VB.NET 入門」をよく読んで COMオブジェクトの解放について確認してみます。 |
1