Problem in passing arrays from C# to C++
I have an application in which I need to pass an array from C# to a C++ DLL. What is the best method to do it? I did some search on Internet and figured out that I need to pass the arrays from C# using ref. The code for the same:
status = IterateCL(ref input, ref output);
The input and output arrays are of length 20. and the corresponding code in C++ DLL is
开发者_开发百科IterateCL(int *&inArray, int *&outArray)
This works fine for once. But if I try to call the function from C# in a loop the second time, the input array in C# is showing up as an array of one element. Why is this happening and please help me how I can call this function iteratively from C#.
Thanks, Rakesh.
You need to use:
[DllImport("your_dll")]
public extern void IterateCL([In, MarshalAs(UnmanagedType.LPArray)] int[] arr1, [Out, MarshalAs(UnmanagedType.LPArray)] int[] arr2);
I'm not sure but try using fixed
:
fixed (int* arr1 = new int[10], arr2 = new int[10])
{
//acting with arr1 arr2 as you wish
}
Or you can use marshaling
[DllImport("your_dll")]
public extern void IterateCL([In, MarshalAs(UnmanagedType.LPArray)] int[] arr1, [Out, MarshalAs(UnmanagedType.LPArray)] int[] arr2);
精彩评论