2010-05-23 2 views
5
    내가 a library 사용할 수 있는지 궁금 해서요
  • - 은 C++ 작성 - C#
  • 문제에서 그 라이브러리가 자신의 구조와 클래스 .. 나는 할 수있다이다 C#에서 사용 하시겠습니까?

감사C# 및 C++ 라이브러리

편집
이 라이브러리 인 오픈 소스 ..
는 나의 요구하면 C++ 코드에서 뭔가 특별한 필요, 나는 ... 그것을 할

답변

3

관리되는 코드에서 C++ 클래스를 직접 사용할 수 없습니다. 주요 문제는 C++ 코드에서 사용되는 것과 동일한 메모리 할당자를 사용할 수없고 생성자와 소멸자를 쉽게 호출 할 수 없습니다. Microsoft 직원이 a blog post을 게시하여 불가능하지 않음을 보여줍니다. 나는 이것을하는 것을 추천하지 않을 것이다.

COM은 솔루션이지만 항상 큰 재 작성 및 좋은 COM 프로그래밍 기술이 필요합니다. 일반적으로 C++/CLI 언어의 managed class wrapper이 가장 적합한 솔루션입니다. 해당 래퍼 클래스를 자동으로 생성하는 것을 고려하려면 SWIG tool을 살펴볼 수 있습니다. 그러나이 도구는 해결할 수있는 것보다 더 많은 문제를 쉽게 만들 수 있습니다.

3

있습니다 수있을 것입니다 두 가지 방법 모두 (.NET 클래스 C++ 클래스를 매핑) 어댑터를 사용하여 :

  • C++/CLI
  • COM

전자는 COM을 거치지 않고 많은 C++ 코드를 올바른 스위치로 컴파일 할 수 있습니다.

추가 : 이론적으로 P/Invoke가 가능하지만 모든 C++ 의미가 손실 될 수 있으므로 수동으로 C++ 객체 수명을 처리해야합니다 (인스턴스 참조는 IntPtr). 물론 맹 글링 된 이름을 호출해야합니다 ...

3

또 다른 옵션은 관리되는 래퍼를 C++/CLI로 작성하는 것입니다. 필자는 P/Invoke를 사용하는 대신 그것을 선호합니다.