- PR -

VB6.0で作ったByRefの引数を持つActiveXDllをC#で動的に呼び出したいのですが・・・

1
投稿者投稿内容
オノックフ
会議室デビュー日: 2004/06/09
投稿数: 1
投稿日時: 2004-06-09 20:49
VB6.0のActiveX Dllプロジェクトで作成した参照渡しの引数を含むメソッドを動的に呼び出したいと思っています。
参照設定に、そのDllを追加すると正常に動作するのですが、Type.InvokeMemberを使用して動的に実行すると参照渡しとなるはずの引数の値が変わりません。
動的に呼び出すと参照渡しは出来ないのかと思いましたが、C#で作成した同機能のAssemblyでは正常に動作してくれます。

コードはこの様になっています。

 int param1 = 100;
 byte[] param2 = new Byte[]{0,1,2,3,4};
 object[] args = new object[]{param1, param2};

 // レジストリに登録したDllを呼び出します。
 Type type = Type.GetTypeFromProgID("VisualBasic.TestClass");

 // type を取得出来たのでインスタンスを生成します。  
 object obj = Activator.CreateInstance(type);

 // TestMethodは、
 // ByRef param1 As Long
 // ByRef param2() As Byte
 // の2つの参照渡しの引数を持ちます。
 object ret = type.InvokeMember("TestMethod", BindingFlags.InvokeMethod, null, obj, args);

 InvokeMember後、戻り値は正常に返ってきますが、引数の値は変わりません。

 // 参照設定にVisualBasic.Dllを追加すると、インスタンスを作って
 VisualBasic.TestClassClass test = new VisualBasic.TestClassClass();

 // インテリセンスが表示されて
 test.TestMethod(

 // ToolTipには
 //(int test.TestMethod(ref int param1, ref SystemArray param2))
 // のように ref の引数が認識されて正常に動作します。

何かご存知の方いらっしゃいましたら教えて頂けませんか。
もし既に出ている質問だったらすいません。
宜しくお願いします。
1

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