2011-09-22 6 views
0

C++로 dll을 만들고 C# 프로그램에 배열을 전달하고 싶습니다. 저는 이미 단일 변수와 구조로이 작업을 수행했습니다. 너무 배열을 전달할 수 있습니까?배열을 C++ 라이브러리에서 C# 프로그램으로 전달

배열이 다른 언어로 설계되어 있고 번역하는 방법을 모르기 때문에 나는 묻습니다.

는 C++에서 나는 그런 식으로 작업을 수행합니다

extern "C" __declspec(dllexport) int func(){return 1}; 

및 C#처럼 :

[DllImport("myDLL.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "func")] 
public extern static int func(); 

답변

2

C++/CLI를 사용하면이 작업을 수행하는 것이 가장 쉽고 간편합니다. 당신의 C 배열은 정수의 말을하는 경우 , 당신은 이런 식으로 할 것 : 나는 반복적으로 관리되는 컨테이너에 네이티브에서 배열의 내용을 복사했다

#using <System.dll> // optional here, you could also specify this in the project settings. 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    const int count = 10; 
    int* myInts = new int[count]; 
    for (int i = 0; i < count; i++) 
    { 
     myInts[i] = i; 
    } 
    // using a basic .NET array 
    array<int>^ dnInts = gcnew array<int>(count); 
    for (int i = 0; i < count; i++) 
    { 
     dnInts[i] = myInts[i]; 
    } 

    // using a List 
    // PreAllocate memory for the list. 
    System::Collections::Generic::List<int> mylist = gcnew System::Collections::Generic::List<int>(count); 
    for (int i = 0; i < count; i++) 
    { 
     mylist.Add(myInts[i]); 
    } 

    // Otherwise just append as you go... 
    System::Collections::Generic::List<int> anotherlist = gcnew System::Collections::Generic::List<int>(); 
    for (int i = 0; i < count; i++) 
    { 
     anotherlist.Add(myInts[i]); 
    } 

    return 0; 
} 

참고. 그런 다음 C# 코드에서 원하는 배열이나 목록을 사용할 수 있습니다.

1
  • 당신은 ++ 라이브러리 네이티브 C에 대한 간단한 C++/CLI 래퍼를 작성할 수 있습니다. Tutorial.
  • 플랫폼 호출을 사용할 수 있습니다. 이 배열은 하나의 배열 만 전달하면 훨씬 간단 해집니다. 복잡한 작업을 수행하는 것은 불가능할 수도 있습니다 (예 : 사소한 객체 전달). Documentation.
1

C++에서 C#으로 배열을 전달하려면 CoTaskMemAlloc 함수 집합을 C++ 측에서 사용하십시오. 이에 대한 정보는 http://msdn.microsoft.com/en-us/library/ms692727

으로 확인할 수 있습니다. 귀하의 직업에 충분할 것이라고 생각합니다.

관련 문제