C#でCOMオブジェクト(DLL)を作ってます。
###発生している問題
関数の戻り値としてクラスを返したいのですが、クラスの配列を含めたクラスを戻り値にすると、受け取り側(VB6)のアプリがコンパイルできません。
###エラーメッセージ(VB6)
コンパイル エラー: 引数の数が一致していません。または不正なプロパティを指定しています。
###問題のコード
lang
1using System.Runtime.InteropServices; 2 3namespace COMTest 4{ 5 [ComVisible(true)] 6 [ClassInterface(ClassInterfaceType.AutoDual)] 7 public class InnerClass 8 { 9 public int InnerID; 10 public string Name; 11 } 12 13 [ComVisible(true)] 14 [ClassInterface(ClassInterfaceType.AutoDual)] 15 public class ClassA 16 { 17 public int ID; 18 public InnerClass[] AAA; 19 } 20 21 [ComVisible(true)] 22 [InterfaceType(ComInterfaceType.InterfaceIsDual)] 23 public interface ITest 24 { 25 ClassA VBGetClassA(); 26 } 27 28 [ClassInterface(ClassInterfaceType.None)] 29 public class FromVB6:ITest 30 { 31 public ClassA VBGetClassA() 32 { 33 ClassA a = new ClassA(); 34 a.ID = 1; 35 a.AAA = new InnerClass[2]; 36 a.AAA[0] = new InnerClass(); 37 a.AAA[0].InnerID = 1; 38 a.AAA[0].Name = @"ClassA-InnerClass1"; 39 a.AAA[1] = new InnerClass(); 40 a.AAA[1].InnerID = 2; 41 a.AAA[1].Name = @"ClassA-InnerClass2"; 42 return a; 43 } 44 } 45}
lang
1VB6 2Private Sub Command1_Click() 3Dim x As COMTest.FromVB6 4Dim a As ClassA 5 6 Set x = New COMTest.FromVB6 7 Set a = x.VBGetClassA() 8 Debug.Print a.ID 9 Debug.Print a.AAA(0).InnerID ' ここでエラーが発生します(AAA(0)が選択される)。 10 Debug.Print a.AAA(0).Name 11 Debug.Print a.AAA(1).InnerID 12 Debug.Print a.AAA(1).Name
###試したこと
AAAを配列にしなければ問題なく動きました。そのときのコードは以下の通りです。
lang
1 ~略~ 2 public class ClassA 3 { 4 public int ID; 5 public InnerClass AAA; 6 } 7 ~略~ 8 public ClassA VBGetClassA() 9 { 10 ClassA a = new ClassA(); 11 a.ID = 1; 12 a.AAA = new InnerClass(); 13 a.AAA.InnerID = 1; 14 a.AAA.Name = @"ClassA-InnerClass1"; 15 return a; 16 } 17 ~略~
lang
1VB6 2Private Sub Command1_Click() 3Dim x As COMTest.FromVB6 4Dim a As ClassA 5 6 Set x = New COMTest.FromVB6 7 Set a = x.VBGetClassA() 8 Debug.Print a.ID 9 Debug.Print a.AAA.InnerID 10 Debug.Print a.AAA.Name 11
###補足情報
VB6のウォッチウインドウで戻り値の中を見ると、配列にしたクラスの中身は問題なく格納されていました。
開発環境は、
Windows7 Professional(SP1)
Microsoft Visual Studio Community 2015
.Net Framework 4.6
Visual C# 2015
VB6(SP6)
です。
以上、宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。