重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【終了しました】教えて!gooアプリ版

VB.NET(VB 2010 Express)でIE9をWebBrowserコントロールではなく直接制御するアプリを作成しています。
そこで、次のURLのVBAによるHTMLソースのフレーム処理を参考にさせて頂いています。
http://vbaie.blog111.fc2.com/blog-entry-20.html

そこから引用しVB.NET用にリライトした下記関数内でエラーとなっています。

'フレームのDocumentを取得する関数
Public Function IEFrameDocument(objIE As Object, url As String) As HtmlDocument

Dim objFrames As mshtml.FramesCollection
Dim frameDoc As HtmlDocument
Dim i As Integer

objFrames = objIE.document.frames

For i = 0 To objFrames.Length - 1
frameDoc = objFrames.item(i).document     'エラー発生の行
If InStr(frameDoc.Url.ToString, url) Then
Exit For
End If
Next

IEFrameDocument = frameDoc

End Function

コメントで表示しているエラー行のエラー内容は、次のとおりです。

<InvalidCastExceptionはハンドルされませんでした。>
型 'mshtml.HTMLDocumentClass' の COM オブジェクトをクラス型'System.Windows.Forms.HtmlDocument' にキャストできません。
COM コンポーネントを表す型のインターフェイスを COM コンポーネントを表さない型にキャストすることはできません。
ただし、基になる COM コンポーネントがインターフェイスの IID の QueryInterface 呼び出しをサポートする場合は、インターフェイスにキャストすることができます。

解決方法を教えて頂きたくよろしくお願い致します。

A 回答 (1件)

> IE9をWebBrowserコントロールではなく直接制御する



であれば、System.Windows.Formsは使えません。
mshtmlのクラス/インターフェースを使いましょう。
というか、サンプル通りに mshtml.IHTMLDocument を使えばよいのでは?
    • good
    • 0
この回答へのお礼

教えて頂いたとおり、mshtml.IHTMLDocument でエラーが解消できました。

去年から手掛けている自分で使うアプリに取り組んでいますが、いくつもの壁にぶち当たり遅々として完成に至っていません。Windowsと.NET、またそれらの関係等の基礎・基本ができていないためのようですが。そちらの知識をつける勉強から始めた方が早いようです。

早速回答頂きありがとうございました。大変助かりました。また一歩完成に近づきました。

お礼日時:2012/09/05 12:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!