- PR -

C#でVB6により作成されたActiveX DLLを遅延バインド(リフレクション?)する

1
投稿者投稿内容
AED
会議室デビュー日: 2002/12/17
投稿数: 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

スキルアップ/キャリアアップ(JOB@IT)