- - PR -
C#でVB6により作成されたActiveX DLLを遅延バインド(リフレクション?)する
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2003-09-16 19:57
お世話になります。
C#のWindowsアプリ開発でVB6により作成されたActiveX DLLを遅延バインド により利用したいと考えています。 (これをリフレクションと呼ぶことは正しいでしょうか?) ヘルプや投稿記事により実行のための大枠はできていると思うのですが エラーが出てしまい解決できません。 ぜひお力を貸してください。 以下長くなってしまいますが、具体例としまして、 VB6.0で次のようなActiveX Dllを作成します。 Class1モジュール内 Dim form as Form1 Public Sub show() Set form = New Form1 form.show vbModal End Sub Form1はFromモジュールをプロジェクトに追加しただけで まったく手は加えていません。 このDllからTlbImp.exeによりタイプライブラリ(DllType.Dllとしました。) を作成します。 すると、Ildasm.exeにより タイプライブラリの場所 @"ファイル保存場所\DllType.Dll" クラス名 "DllType.Class1Class" メソッド名 "show" という情報が得られたので C#で private void functionName() { string fileName = @"ファイル保存場所\DllType.Dll"; string className = "DllType.Class1Class"; string methodName = "show"; Assembly dllAssembly = Assembly.LoadFrom(fileName); Type classType = dllAssembly.GetType(className); Type methodType = classType.GetMethod(methodName); object dllInstance = dllAssembly.CreateInstance(className); // Thread.GetDomain().CreateComInstanceFrom(fileName,className)や // Activator.CreateInstance(classType) // よりインスタンスを取得しても同様 methodType.Invoke(dllInstance,null); } 以上のように実行すると methodType.Invoke(dllInstance,null); の部分で System.Reflection.TargetInvocationExceptionのハンドルされていない例外が mscorlib.dllで発生しました。 追加情報:呼び出しのターゲットが例外をスローしました。 というエラーが発生してしまいます。 どのようにすべきなのかご教授ください。 以上、よろしくお願いいたします。 [ メッセージ編集済み 編集者: AED 編集日時 2003-09-19 20:30 ] |
1
