エラー内容は、型 'mshtml.HTMLDocumentClass' の COM オブジェクトをクラス型'System.Windows.Forms.HtmlDocument' にキャストできないため発生しています。解決方法を教えてください。
InvalidCastExceptionエラーが
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 呼び出しをサポートする場合は、インターフェイスにキャストすることができます。
解決方法を教えて頂きたくよろしくお願い致します。
お礼
教えて頂いたとおり、mshtml.IHTMLDocument でエラーが解消できました。 去年から手掛けている自分で使うアプリに取り組んでいますが、いくつもの壁にぶち当たり遅々として完成に至っていません。Windowsと.NET、またそれらの関係等の基礎・基本ができていないためのようですが。そちらの知識をつける勉強から始めた方が早いようです。 早速回答頂きありがとうございました。大変助かりました。また一歩完成に近づきました。