一,指针,地址传递
ref
pablic static extern int add(int a,int b,ref int c);
二,数组传出
pablic static extern int add([MarshalAs(UnmanagedType.LPArray,SizeParamIndex=1)] double[] result);
double[] res = new double[];
add(res);
三、结构体传入与传出
//传入结构体
public struct inDisplayData
{
[MarshalAs(UnmanagedType.I4)]
int e;
[MarshalAs(UnmanagedType.I4)]
int con;
Inptr I_ed;//数组
Inptr Q_ed;//数组
}
//传出结构体
public struct outDisplayData
{
[MarshalAs(UnmanagedType.I4)]
int e;
[MarshalAs(UnmanagedType.I4)]
int con;
short[] I_ed;//数组
short[] Q_ed;//数组
}
inDisplayData inData = new inDisplayData();
inData.I_ed = Marshal.AllocHGloval(20);//数组长度为20
inData.Q_ed = Marshal.AllocHGloval(20);//数组长度为20
inData.e=0;
inData.con=0;
public static extern int prosses(ref inDisplayData inData);
int res;
res = prosses(ref inData);
outDisplayData outData = new outDisplayData();
outData.e = inData.e;
outData.con = inData.con;
outData.I_ed = new short[20];
Marshal.Copy(inData.I_ed,outData.I_ed,0,20);
outData.Q_ed = new short[20];
Marshal.Copy(inData.Q_ed,outData.Q_ed,0,20);