我在VB6中写的 DLL :
  Sub GetRaininfo(ByRef para1() As Single)  '可以传出值
     For i = 0 To 9
         para1(i) =  i * 10
     Next i
  End Sub=============================================================
那么:我在C#中,引用这个DLL后,
  它的接口为 GetRaininfo(ref System.Array para1)=============================================================
使用方法此,
  int i, arrLen = 10;
  Single[] dp1 = new Single[arrLen];
  for (i = 0; i < arrLen; i++) { dp1[i] = 0; }
  testDLL.testDLClass DLL_DB = new testDLL.testDLClass();   Array aP1 = (Array)dp1 ;// Array.CreateInstance(typeof(Single), dp1.Length);
   DLL_DB.GetRaininfo(ref aP1);// aP1返回值仍然是0
   Single oneValue = aP1[3]; // 返回值仍然是0  ,应该是20才对,为什么??

解决方案 »

  1.   

     for (i = 0; i < arrLen; i++) { dp1[i] = 0; } 
    <== 0 乘以 任何数都为0 ...,你把所有成员都是赋值为0的
      

  2.   

    我这里测试是正确的,只有一句话跟楼主的不一样,在VB6里面我声明了 Dim i as integer
      Sub GetRaininfo(ByRef para1() As Single)  '可以传出值 
        dim i as integer
        For i = 0 To 9 
            para1(i) =  i * 10 
        Next i 
      End Sub 
      

  3.   

    VB啊,不会啊。学习吧。和C#还是有很多却别的。
      

  4.   

    就算在VB6中写: 
      Sub GetRaininfo(ByRef para1() As Single)  '可以传出值 
        For i = 0 To 9 
            para1(i) =  i + 10 
        Next i 
      End Sub C#中:
    DLL_DB.GetRaininfo(ref aP1);// aP1返回值仍然是0 
      Single oneValue = aP1[3]; // 返回值仍然是0  ,应该是20才对,为什么??
      

  5.   

    Single[] aP1 = new Single() {0,0,0,0,0,0,0,0,0,0};
    DLL_DB.GetRaininfo(ref aP1); 
    Single oneValue = aP1[3];你自己测试一下吧(没有你的DLL)。
      

  6.   


            public void Test()
            {
                testDLL.testDLClass DLL_DB = new testDLL.testDLClass();
                float[] a = new float[10];
                for (int i = 0; i < a.Length; i++)
                    a[i] = 0;
                DLL_DB.GetRaininfo(ref a);
                Console.WriteLine(a[3]);
            }
      

  7.   

    Single oneValue = aP1[3]; 你这样根本不能编译通过对吧,会报[]不能用在array的错误的
      

  8.   

    for (i = 0; i < arrLen; i++) { dp1[i] = 0; } 初始化的时候应该是dp1[i] = i;
    你都设成0了,当然结果也都是0了
      

  9.   

    下了个vb6精简版试了下可以得到值么int i, arrLen = 10;
                Single[] dp1 = new Single[arrLen];
                for (i = 0; i < arrLen; i++) { dp1[i] = 0; }
                //testDLL.testDLClass DLL_DB = new testDLL.testDLClass();
                工程1.Class1Class c = new 工程1.Class1Class();
                Array aP1 = (Array)dp1;// Array.CreateInstance(typeof(Single), dp1.Length); 
                c.GetRaininfo(ref aP1);// aP1返回值仍然是0 
                Single oneValue =(Single ) aP1.GetValue(3); // 得到30啊
    ps:1.vb6精简版真小,才5.8m
       2.vb6的dll 居然c#里可以直接引用,果然ms自己人的东西很照顾