2010-12-19 70 views
0

嗨在C#中有一個項目,它返回一個MyClass類型的對象與GetArray()方法的列表。 我用regasm ClassLibrary1.dll/codebase/tlb註冊這個dll,然後在VB6的項目中添加ClassLibrary1.tlb引用,如下面的代碼。 當我運行Microsoft Visual Studio 6.0中它的工作原理,但是當我試圖運行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

如果您發佈了運行時錯誤,這將有所幫助。 – 2010-12-19 10:11:27

+0

您也可以在EXE本身而不是IDE中對其進行測試。出於某種原因,我們無法讓VB6應用程序在IDE中工作,但EXE正常工作。 – jakdep 2010-12-20 11:08:50

回答

0

試着改變你的公共領域MyClass.Nome到公共屬性內的VB6應用程序:

public string MyNome { get; set; }