调用的是C++编写的com组件中的函数
原型为:HRESULT TEST([out]int **buffer);//buffer是一个指向int数组的指针
内部实现为:
     *buffer[0] = 1;
     *buffer[1] = 2;在C++中使用:
int *buffer = new int[10];
TEST(&buffer);           //即可得到结果在C#中引用COM组件后函数变为TEST(intptr buffer);问:
1:如何写代码接受这个数组呢?
2:若申请内存是在COM组件中,那么在C#中如何释放的呢?注:
一个问题50分!

解决方案 »

  1.   

    C++没怎么用过,但是根据经验,
    函数可以声明为
    TEST(int[] buffer);
    因为在.net中数组是引用类型,其实质也是一个指针
      

  2.   

    1.IntPtr ptr = Marshal.UseUnsafexxx(buffer,10);
    2.没法释放,也不用释放。
      

  3.   

    用C++写的COM组件函数为:
    HRESUT TEST(int **buffer)
    {
        *buffer[0] = 100;
        return S_OK;
    }在.net下的C#引用COM组件后函数原型变为TEST(intptr buffer);
    我是想在C#中取得buffer中的数据 如100.
      

  4.   

    C++                C# 
    char*        string 
    传出的char*      StringBuilder 
    short            short 
    char              byte 
    char[n]          fixed byte[n] 
    结构指针          结构指针 
    函数指针          委托 
    结构体数组使用IntPtr 
    http://topic.csdn.net/u/20090225/15/a6bc50ad-9721-4749-b189-dc4a4bc045a1.html
      

  5.   

    比如 我现在这么写:
                TESTLib.TestiClass otest = new TESTLib.TestiClass();
                IntPtr intptr = System.Runtime.InteropServices.Marshal.AllocCoTaskMem(40);
                otest.test(intptr);他会报错:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
      

  6.   

    时间关系 这个问题放下了换种传参方式吧。不用int**了。