解决方案 »

  1.   

    http://tcspecial.iteye.com/blog/1675309
      

  2.   

    你的接口只需要传Music结构体就行,那你就new一个Music然后传过去就行了
      

  3.   

    但是我的数组中有三个值,music1,2,3,new一个,我传哪个?
      

  4.   

    对于简单的按值传递的结构体数组,直接传数组就可以,见http://msdn.microsoft.com/zh-cn/library/hk9wyw21(v=vs.110).aspx
      

  5.   

    但是我的数组中有三个值,music1,2,3,new一个,我传哪个?如果这个定义没错的话,那么传递一个即可代表指针,不需要new。
      

  6.   

    c#中定义个Music的结构体
    如:    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
        public struct SMusic
        {
                 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
                 public string name;       //长度定义需要根据具体定义做修改
           public int  size;
       }
       //传数组进去
        public static extern int addList (SMusic[] musicArray , int len);
      

  7.   

    如果接口是 addList (Music music , int len);
    一种是new Music, 一个个传过去。
    如果接口是 addList (Music[] music , int len);
    可以new Music[],一起传了。
      

  8.   

    请问6楼:我知道要传一个指针,所以才问怎么获取数组的首地址,这个指针是什么呢?
    7楼把dll的接口给改了
      

  9.   

    别一个个传,dll会报错的,dll要接受一个结构体数组,而这个数组我在c#中已经获取了,但是参数的时候要传Music[ ] music的首地址,public static extern int addList (Music music , int len);(Music music , int len加起来才是数组)   所以,,,不会传了
      

  10.   

    如果是传给 C#,那么没有首地址的概念。
    如果是传给 C++,那么直接使用 数组,然后 marshalAs LPArray 就可以了。
      

  11.   

    C#的结构体数组,传给C,
    MUSIC_DLL_EXPORT int addList (const struct Music *music, int len);[DllImport("music.dll", CallingConvention = CallingConvention.Cdecl)]
    public static extern int addList (Music music , int len);
    C#需要传给C的数组Music[ ] music = new music[3]{music1,music2,music3}
    请问怎么调用C中的addList 方法
      

  12.   

    public static extern int addList ([MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)]Music music , int len);
      

  13.   

    public static extern int addList ([MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)]Music[] music , int len); 
      

  14.   

     assertion failed 声明失败
    我试过
      

  15.   

    你的 Music  和 C 平台一致吗?
    使用 Strcut Layout 了吗?
      

  16.   

     [StructLayout(LayoutKind.Sequential)]这个么?
      

  17.   

    问题解决了,加上 [StructLayout(LayoutKind.Sequential)]解决了,3q
      

  18.   

     [StructLayout(LayoutKind.Sequential)]请问这个有什么用?我修改次数太多,后来忘加了,疏忽了