2010-12-19 22 views
0

こんにちは、GetArray()メソッドでMyClass型のオブジェクトのリストを返すC#プロジェクトがあります。 私はこのDLLをregasm ClassLibrary1.dll/codebase/tlbに登録して、次にVB6のプロジェクトでClassLibrary1.tlb参照を下のコードとして追加します。 私は、MicrosoftのVisual Studio 6.0内部VB6アプリケーションを実行すると、それは動作しますが、私はVB6のexeファイルを実行しようとすると、私はランタイムエラークラスオブジェクトの配列をC#からVB6に渡す

using System.Collections.Generic; 

using System.Runtime.InteropServices; 

namespace ClassLibrary1 

{ 

    [ClassInterface(ClassInterfaceType.AutoDual)] 

    [Guid("D878834C-306E-4260-905F-BDEBDF14CBDA")] 

    [ComVisible(true)] 

    public class MyProjectC 

    { 

     public MyClass[] GetArray() 

     { 

      var list = new List<MyClass> 

          { 

           new MyClass {Nome = "A"}, 

           new MyClass {Nome = "AB"}, 

           new MyClass {Nome = "AC2"}, 

           new MyClass {Nome = "D"} 

          }; 

      return list.ToArray(); 
     } 
    } 


    [ClassInterface(ClassInterfaceType.AutoDual)] 

    [Guid("D878834C-306E-4260-905F-BDEBDF14C111")] 

    [ComVisible(true)] 

    public class MyClass 

    { 

     public string Nome; 

    } 

} 


Private Sub Form_Load() 

    On Error GoTo error 

    Dim str As String 

    Dim oBookMark As Variant 
    Dim theProjectC As New ClassLibrary1.MyProjectC 


    For Each oBookMark In theProjectC.GetArray 
     str = oBookMark.Nome 
     MsgBox str 
    Next 

    Exit Sub 

error: 
MsgBox "Errore" & Err.Description 

End Sub 
+4

ランタイムエラーが何かを投稿した場合に役立ちます。 –

+0

また、IDEではなくEXE自体でテストすることもできます。いくつかまたは他の理由で、IDEでVB6アプリケーションを動作させることはできませんが、EXEは正常に動作します。 – jakdep

答えて

0

を持っていることは、パブリックプロパティにパブリックフィールドMyClass.Nomeを変更してみてください:

public string MyNome { get; set; } 
関連する問題