2010-03-09 2 views
3

C#에서 C++ DLL로 배열을 전달해야하는 응용 프로그램이 있습니다. 가장 좋은 방법은 무엇입니까? 인터넷에서 일부 검색을 수행하고 C#에서 ref를 사용하여 배열을 전달해야한다는 것을 알아 냈습니다. 동일한위한 코드 : C++에서 DLLC#에서 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이고 두 번째 매개 변수는 Out입니다. 두 매개 변수에 대해 두 속성을 모두 지정할 수는 있지만 과용이 될 것입니다. – abatishchev

관련 문제