这样:public delegate bool DataCallBack(int index, int type, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 3)] byte[] data, int len, int width, int height); 还是这样: [MarshalAs(UnmanagedType.LPArray, SizeParamIndex=3)] public delegate bool DataCallBack(int index, int type, byte[] data, int len, int width, int height);?能讲下原因不?
修饰在参数的前面,告诉程序, data 是一个数组。 但是 C++ 的数组长度是有单独的参数来说明的。此时需要告诉程序是哪个参数来修饰数组的长度的。 这个修饰就是 SizeParamIndex,表示这个长度在从 0 开始的第三个参数。C++ 如何修饰的,可以看看 IDL 。C# 修饰在整个函数的前面,是用来修饰返回值的,而且需要[return:MarshalAs()]。 所以第二个是编译不过的。
[MarshalAs(UnmanagedType.LPArray, SizeParamIndex=3)] byte[] pdata
还是这样:
[MarshalAs(UnmanagedType.LPArray, SizeParamIndex=3)]
public delegate bool DataCallBack(int index, int type, byte[] data, int len, int width, int height);?能讲下原因不?
但是 C++ 的数组长度是有单独的参数来说明的。此时需要告诉程序是哪个参数来修饰数组的长度的。
这个修饰就是 SizeParamIndex,表示这个长度在从 0 开始的第三个参数。C++ 如何修饰的,可以看看 IDL 。C# 修饰在整个函数的前面,是用来修饰返回值的,而且需要[return:MarshalAs()]。
所以第二个是编译不过的。