2010-03-09 30 views
3

我有一个应用程序需要将数组从C#传递到C++ DLL。什么是最好的方法来做到这一点?我在互联网上做了一些搜索,发现我需要使用ref从C#传递数组。对于相同的代码:在C++ DLL从C#传递数组到C++的问题

status = IterateCL(ref input, ref output); 

输入和输出数组是长度20的和对应的代码是

IterateCL(int *&inArray, int *&outArray) 

这一次工作正常。但是,如果我第二次尝试从循环中调用C#中的函数,则C#中的输入数组将显示为一个元素的数组。为什么会发生这种情况,请帮助我如何从C#中迭代调用此函数。

谢谢, Rakesh。

回答

1

您需要使用:

[DllImport("your_dll")] 
public extern void IterateCL([In, MarshalAs(UnmanagedType.LPArray)] int[] arr1, [Out, MarshalAs(UnmanagedType.LPArray)] int[] arr2); 
2

我不知道,但尝试使用fixed

fixed (int* arr1 = new int[10], arr2 = new int[10]) 
{ 
      //acting with arr1 arr2 as you wish 
} 

或者你也可以使用封送处理

[DllImport("your_dll")] 
public extern void IterateCL([In, MarshalAs(UnmanagedType.LPArray)] int[] arr1, [Out, MarshalAs(UnmanagedType.LPArray)] int[] arr2); 
+1

@ILya:叶氏,它没有必要。 – abatishchev

+0

@abatishchev为什么没有OutAttribute?我认为我们需要从C++返回一个值到C#,但InAttibute只是一个方向。 – ILya

+0

据我了解OP函数声明,第一个参数只有In和第二个输入。虽然你可以指定两个参数的两个属性,但我想这将是过度使用 – abatishchev