HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0225
COMメソッドの返してくるオブジェクトの利用可否について2解決


リンク

2018/2/25(Sun) 17:48:32|NO.82558

お世話になります。
COMオブジェクトに対するメソッド呼び出しによって、新しいオブジェクトを取得するケースはよくあると思います。IEコンポーネントのDOMツリーしかり、Wordのオートメーションしかりです。
通常であれば、戻ってきたオブジェクトへのポインタがNULLかどうかを調べる、戻り値がS_OKかどうかを調べるなどして、実際にオブジェクト取得が成功したかどうかを調べることができますが、HSPにおいて、このへんの例外処理はどうやって作るのでしょうか?
今、IEコンポーネント経由でDOMを操作するコードを書いていて、想定している要素がDOM上になかったとき、エラー39で終了してしまいます。
例えば、
pDoc = ie("Document")//ドキュメントがまだなかったら、pDoc はどうなるか
pDoc->"Something" //pDoc が利用不可だったらここで落ちる、でも落ちる前に例外を捕まえたい
こういう感じです。
doclib/hspprog.htmlには、COMオブジェクトへのポインタを直接チェックできるようなことは書いていなかったので、戻ってきたポインタが利用可能なのかどうかが分からない状態です。
おわかりの方がいらっしゃれば、どうぞよろしくお願いいたします。



この記事に返信する


あまら

リンク

2018/2/25(Sun) 18:57:58|NO.82562

・URLを読み込み中の場合

pDoc = ie("Document")
このときのpDocにはCOMポインタ形式で0が入っています。

COMポインタは直接数値として扱ったりできないので、
別途int型の変数を用意してから
memcpy pDocINT, pDoc, 4

などとすれば、pDocINTを通すことで間接的ではありますがpDocの数値をif文で比較するなり
mesで画面に表示するなりが可能になります。



・URLを読み込み後、しかしURL自体が存在しない場合

読み込み後には適当なポインタが入っています。

【このページを表示できません】

という文字列を表示するためのページを開いている(?)と解釈されるのだと思います。



リンク

2018/2/25(Sun) 20:03:22|NO.82565

あまら さん
早速のご回答ありがとうございます。
うわ!強引にコピーしたら取れるのか!マジか!wwww
先ほど pDoc を出したのは一例で、現在構築中のシステムでは、おそらく、「このページは存在しません」のようなドキュメントを誤って取得してしまうことはないと思われます。
例外が十分発生しうる GetElementById を多用する箇所があったので、ポインタチェックできるのはほんとにありがたいです。さっそく使ってみます。ありがとうございました!



ONION software Copyright 1997-2023(c) All rights reserved.