public static extern void cvDistTransform(IntPtr src, IntPtr dst, DIST_TYPE distanceType, int maskSize, float[] userMask, IntPtr labels);
float[] userMask 在C++中可以输入NULL,在C#中调用改用啥?

解决方案 »

  1.   

    把那个参数定义为intptr
    如果非null
    float[] a=
    intptr pf = Marshal.UnsafeAddrOfPinnedArrayElement(a,0);
    传入
      

  2.   

        float[] a = new float[0];
    我搞了个这样的数组传进去,居然可以!呵呵
      

  3.   

    float[] userMask = NULL;首先这个代码不伦不类,根本在 C++ 里面编译不了。其次,指向空数组的指针和指向数组的空指针是两个不同的概念,看上去lz的最初想表达的是后者。但是后来又是想表达前者。最后,C#没有指针概念,无法和C++类比。也许lz是高手,会告诉我,C#也是支持指针的云云。但是互操作兼容是C#使用指针唯一的目的,而lz所谓的解决事实上没有解决。如果你要传空指针,直接传0就可以了。
      

  4.   

    caozhy 大师我一向是尊敬你的!
      

  5.   

    caozhy 大师
    是你提醒了我!我好像还没想到你这么深的层次!指向空数组的指针和指向数组的空指针,呵呵我其实知道自己想要的是一个指向空数组的指针
    float[] userMask = NULL;
    float[] a = new float[0];
    这两种方式我都试了,事实上都可以使得函数正常的运行!