- 締切済み
種類が一致しません。 (HRESULT からの例外
VB.NET(2.0)からActiveXコントロールを使用しています。 あるメソッドを使おうとすると、 'System.Runtime.InteropServices.COMException' の初回例外が mscorlib.dll で発生しました。 とイミディエイトウィンドウに出て、 COMException はハンドルされませんでした。 種類が一致しません。 (HRESULT からの例外: 0x80020005 (DISP_E_TYPEMISMATCH)) という例外ヘルパのメッセージが出てきます。 試しに、そのActiveXコントロールを埋め込んだHTMLを作り、VBScript で同メソッドを同条件で使うと、正しく処理をしてくれるので、メソッド内で例外が発生するような事はないのは確認済みです。 http://msdn.microsoft.com/ja-jp/library/af1y26ew(VS.90).aspx を読んで、ErrorCode が "-2147352571" になっている事を確認しましたが、それ以上解決策を見つける事が出来ませんでした。そもそも「種類が一致しません。」の意味が分かりません。何の種類なんでしょうか。 どなたかお力添え頂ければ幸いです。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- MARU4812
- ベストアンサー率43% (196/452)
「DISP_E_TYPEMISMATCH」で検索したら引数の型っぽいけど? http://support.microsoft.com/kb/175617/ja > ActiveXコントロール > VBScript VB6 準拠じゃないの?VB.NET では型の定義が一新されたけど、 正しく使ってるの? http://msdn.microsoft.com/ja-jp/library/dd297710.aspx http://msdn.microsoft.com/ja-jp/library/dd297706.aspx http://msdn.microsoft.com/ja-jp/library/dd297724.aspx http://msdn.microsoft.com/ja-jp/library/dd297698.aspx そもそもそのActiveXはVB.NETに対応してるの? http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=46266&forum=7
補足
ありがとうございます。 > 「DISP_E_TYPEMISMATCH」で検索したら引数の型っぽいけど? そのページも既読ですが、DISPARAM structure の意味が分かりません。 > VB6 準拠じゃないの?VB.NET では型の定義が一新されたけど、正しく使ってるの? VB6 準拠と .NET 準拠の ActiveX コントロールが存在するんですね。 使用しているのはVS2008C++環境ビルドのhoge.ocxです。 AxImp.exe /source にて hoge.ocx から AxhogeLib.cs と hogeLib.dll を機械的に生成してます。 > そもそもそのActiveXはVB.NETに対応してるの? 他に160個ほどメソッドを出してますが、他のは動いている、という奇妙な状況なんです。 もちろん、型は気をつけるとして、他にどんな事をすれば MARU4812 さんのおっしゃる「VB.NET に対応」できるのでしょうか。 ocx では 宣言: BSTR method(short x, LPCTSTR str); ディスパッチマップ: DISP_FUNCTION_ID(Choge, "method", dispidmethod, method, VT_BSTR, VTS_I2 VTS_BSTR) [id(163), helpstring("メソッド method")] BSTR method(short x, BSTR str); といった具合で宣言しており ラッパとなる AxhogeLib.cs では、method は public virtual string method(short x, string str) { if ((this.ocx == null)) { throw new System.Windows.Forms.AxHost.InvalidActiveXStateException("method", System.Windows.Forms.AxHost.ActiveXInvokeKind.MethodInvoke); } string returnValue = ((string)(this.ocx.method(x, str))); return returnValue; } としてラッピングされてます。 VB側から実際に叩くのは、AxhogeLib.cs をビルドした AxhogeLib.dll です。 methodの仮引数を入れ替えたりしましたが「種類が一致しません」のエラー、仮引数を試しにvoidにすると「パラメータはオプションではありません」のエラーです。