别一个个传,dll会报错的,dll要接受一个结构体数组,而这个数组我在c#中已经获取了,但是参数的时候要传Music[ ] music的首地址,public static extern int addList (Music music , int len);(Music music , int len加起来才是数组) 所以,,,不会传了
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 方法
public static extern int addList ([MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)]Music music , int len);
public static extern int addList ([MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)]Music[] music , int len);
如: [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);
一种是new Music, 一个个传过去。
如果接口是 addList (Music[] music , int len);
可以new Music[],一起传了。
7楼把dll的接口给改了
如果是传给 C++,那么直接使用 数组,然后 marshalAs LPArray 就可以了。
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 方法
我试过
使用 Strcut Layout 了吗?