把int[]数组当成一个参数从C++传到C#里...不过我这么说却不知道怎么做,你既然能传递一个参数想来传递个数组也不难吧

解决方案 »

  1.   

    问题是我的COM组件里有很多这样的接口,如果当一个参数传递进去势必要改变所有的接口程序,这样做代价太大,有更好的解决办法吗?
      

  2.   

    你的 Add 函数有对数组后面的东西赋值吗? 声明一个整数, 循环一轮, 然后对指针的所指的内容赋值,完事...后面的呢?再者, 你在哪里的资料看到 C# 的内存地址是不连续的?
      

  3.   

    回答:你的 Add 函数有对数组后面的东西赋值吗?
    int[] value = new int[10]; 
    for(int i=0;i <10;i++) 

        value[i]=i; 
    } 回答:你在哪里的资料看到 C# 的内存地址是不连续的?
    你试试就知道了
      

  4.   

    看清楚一点,原来输出参数是不需要的....// 要求三个参数
    Add([in]int size,[in,size_is(size)]int a[],[out]int *ResultValue) // 提供两个参数
    IMath.Add(10,ref value[0]);看来我还是没有明白楼主的意图啊...
      

  5.   

    a[]是输入参数:
    *ResultValue是返回结果。
    我失误,应该是
    int Value = 0;
    IMath.Add(10,ref value[0],out value); 
    这不是关键地方,关键是输入数组value在组件中value[0]是地址是对的,value[1]就有问题了
      

  6.   

    谁告诉你C#数组内存地址不是连续的?
    另外要用和C/C++一样的数组自己用Marshal申请内存去.
      

  7.   

    using System;
    using System.Drawing;
    unsafe class test
    {
            static void Main ()
            {
    int[] arr = new int [10];
    fixed (int* ptArr0 = &arr[0])
    {
    int* ptArr = ptArr0;
    for (int i=0;i<arr.Length;++i)
    {
    arr[i] = i;
    }
    for (int i=0;i<arr.Length;++i)
    {
    Console.WriteLine ("{0} @ Addr:0x{1:X}",*ptArr,(uint)ptArr);
    ptArr++;
    }

    }
            }
    }输出:0 @ Addr:0x1C129B4
    1 @ Addr:0x1C129B8
    2 @ Addr:0x1C129BC
    3 @ Addr:0x1C129C0
    4 @ Addr:0x1C129C4
    5 @ Addr:0x1C129C8
    6 @ Addr:0x1C129CC
    7 @ Addr:0x1C129D0
    8 @ Addr:0x1C129D4
    9 @ Addr:0x1C129D8怎么不连续了?
      

  8.   

    c#的数组肯定是内存连续的,不连续的是ArrayList,但楼主的意图并不是想知道空间地址连不连续,楼主需要解决的是通过RCW从.net传过去的数组在COM那头只能得到首地址的内容,其他内容显示的肯定是“错误的指针”一类的提示